def _reply(request, board_name, article_id): ''' 주어진 게시판의 주어진 글에 실제로 reply 를 단다. @type request: Django Request @param request: Request @type board_name: string @param board_name: reply를 달고자 하는 글이 있는 board name @type article_id: string (int) @param article_id: reply를 달고자 하는 글의 번호 @rtype: int @return: reply 가 달리는 글의 root id ''' server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) reply_dic = {} reply_dic['content'] = request.POST.get('content', '') reply_dic['title'] = request.POST.get('title', '') reply_dic['heading'] = request.POST.get('heading', '') # TODO: HEADING !! root_id = request.POST.get('root_id', '') use_signature = request.POST.get('signature_check', None) if use_signature: reply_dic['content'] += '\n\n' + request.POST.get('signature', '') article_id = server.article_manager.write_reply( sess, board_name, int(article_id), WrittenArticle(**reply_dic)) #upload file if request.FILES: _upload_file(server, sess, article_id, request.FILES) return root_id
def update(request): server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) blacklist = server.blacklist_manager.get_blacklist(sess) bl_submit_chooser = request.POST['bl_submit_chooser'] if bl_submit_chooser == "update": for b in blacklist: article_bl_key = 'blacklist_article_%s' % b.blacklisted_user_username if article_bl_key in request.POST: b.block_article = True else: b.block_article = False message_bl_key = 'blacklist_message_%s' % b.blacklisted_user_username if message_bl_key in request.POST: b.block_message = True else: b.block_message = False server.blacklist_manager.modify_blacklist(sess, BlacklistRequest( blacklisted_user_username = b.blacklisted_user_username, block_article = b.block_article, block_message = b.block_message)) if bl_submit_chooser == "delete": for b in blacklist: delete_user = request.POST.get('bl_%s_delete' % b.blacklisted_user_username, "") if delete_user != "": server.blacklist_manager.delete_blacklist(sess, delete_user) return HttpResponseRedirect("/blacklist/")
def read(request, board_name, article_id): ''' 주어진 게시판의 주어진 글을 읽어온다. @type request: Django Request @param request: Request @type board_name: string @param board_name: 읽고자 하는 글이 있는 Board Name @type article_id: string (int) @param article_id: 읽고자 하는 글의 번호 ''' server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) r['mode'] = 'board' # 글의 정보를 r 에 저장 _read(request, r, sess, board_name, article_id) # 화면 하단의 글목록의 정보를 r 에 저장 if filter(lambda x: x.board_name == board_name, r['board_list']): # 게시판 통폐합으로 인해 기존 링크가 깨지는 것을 방지 get_article_list(request, r, 'read') fake_author(r['article_list'], False) fake_author(r['article_read_list']) # 계층형 Reply 구조를 위해 reply를 미리 render rendered_reply = render_reply(board_name, r['article_read_list'][1:], '/board/%s/' % board_name) r['rendered_reply'] = rendered_reply r['article'] = r['article_read_list'][0] rendered = render_to_string('board/read.html', r) return HttpResponse(rendered)
def read(request, mode, article_id): ''' 컬렉션의 주어진 글을 읽어온다. @type request: Django Request @param request: Request @type article_id: string (int) @param article_id: 읽고자 하는 글의 번호 ''' server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) # 글의 정보를 r 에 저장 warara.board.views._read(request, r, sess, u'', article_id) # 화면 하단의 글목록의 정보를 r 에 저장 warara.board.views.get_article_list(request, r, COLLECTION_TYPE[mode]['read_mode']) # board_name 이 없기 때문에 사용한 Hack. r['board_name'] = COLLECTION_TYPE[mode]['board_name'] r['mode'] = mode warara.board.views.fake_author(r['article_read_list']) warara.board.views.fake_author(r['article_list'], False) # 계층형 Reply 구조를 위해 reply를 미리 render r['rendered_reply'] = warara.board.views.render_reply(r['board_name'], r['article_read_list'][1:], COLLECTION_TYPE[mode]['base_url']) r['article'] = r['article_read_list'][0] rendered = render_to_string('board/read.html', r) return HttpResponse(rendered)
def login(request): if request.method != 'POST': return HttpResponseRedirect('/') if request.POST.get('precheck', 0): return login_precheck(request) # 가끔 username / password 를 아예 안 넣는 경우가 있다. username = request.POST.get('username', None) password = request.POST.get('password', None) if username == None or password == None: # XXX 2010.07.02. 사실 합당한 에러를 만들어야 하는데 ... raise NotLoggedIn() # 로그인 요청을 수행한 url 을 current_page 로 설정한다 # 해당되는 url 이 없을 경우 /main/ 을 기본값으로 설정한다 current_page = request.POST.get('current_page_url', '/main/') client_ip = request.META['REMOTE_ADDR'] server = warara_middleware.get_server() try: session_key = server.login_manager.login(username, password, client_ip) except InvalidOperation, e: #XXX: (pipoket) Ugly hack for showing nickname while not logged in. # print e.why splited = e.why.splitlines() if splited[0] == 'not activated': username = splited[1] nickname = splited[2] rendered = render_to_string('account/mail_confirm.html', { 'username': username, 'nickname': nickname}) return HttpResponse(rendered) else: return HttpResponse('<script>alert("Login failed!"); history.back()</script>');
def rss(request, mode): ''' 컬렉션에 대한 RSS 파일을 제공한다. @type request: Django Request @param request: Request ''' from django.utils import feedgenerator server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) feed = feedgenerator.Atom1Feed(title = u'ARA', link = COLLECTION_TYPE[mode]['base_url'] + 'rss/', description = COLLECTION_TYPE[mode]['rss_desc']) page_no = 1 page_length = 20 if mode == 'all': article_list = server.article_manager.article_list(sess, u"", u"", page_no, page_length, True).hit elif mode == 'scrap': article_list = server.article_manager.scrapped_article_list(sess, page_no, page_length).hit warara.board.views.fake_author(article_list, False) for article in article_list: feed.add_item(title='[%s]%s' % (article.board_name, article.title), link = COLLECTION_TYPE[mode]['base_url'] + '%d/' % article.id, author_name=article.author_nickname, pubdate=datetime.datetime.fromtimestamp(article.date), description=u'author : %s date : %s' % (article.author_nickname, datetime.datetime.fromtimestamp(article.date))) return HttpResponse(feed.writeString('utf-8'), mimetype=feedgenerator.Atom1Feed.mime_type)
def read(request, message_list_type, message_id): server = warara_middleware.get_server() sess, _ = warara.check_logged_in(request) r = {} r["logged_in"] = True r["page_length"] = request.GET.get("page_length", 10) r["page_no"] = request.GET.get("page_no", 1) message_id = int(message_id) if message_list_type == "inbox": r["message"] = server.messaging_manager.read_received_message(sess, message_id) elif message_list_type == "outbox": r["message"] = server.messaging_manager.read_sent_message(sess, message_id) r["message"].sent_time = datetime.datetime.fromtimestamp(r["message"].sent_time) r["message_id"] = message_id r["message_list_type"] = message_list_type if message_list_type == "inbox": r["person_type"] = "sender" r["person"] = r["message"].from_ elif message_list_type == "outbox": r["person_type"] = "receiver" r["person"] = r["message"].to rendered = render_to_string("message/read.html", r) return HttpResponse(rendered)
def render(self, ctx): server = warara_middleware.get_server() # XXX(hodduc) : wairara.check_logged_in을 거쳤음에도 불구하고 Context를 따로 만들어서 쓰는 view가 너무 많다. # 하나로 통일하는 것이 깔끔해 보인다 if not 'arara_session' in ctx: return '' sess = ctx['arara_session'] # Get Weather info if warara_settings.USE_WEATHER_FORECAST: ctx['weather_info'] = server.bot_manager.get_weather_info(sess) if ctx['weather_info'].city == None: ctx['has_weather'] = False else: if ctx['weather_info'].city.lower() == 'daejeon': ctx['weather_info'].city = u'대전' elif ctx['weather_info'].city.lower() == 'seoul': ctx['weather_info'].city = u'서울' ctx['weather_info'].current_icon_url = weather_icon_replace(ctx['weather_info'].current_icon_url) ctx['weather_info'].tomorrow_icon_url = weather_icon_replace(ctx['weather_info'].tomorrow_icon_url) ctx['weather_info'].day_after_tomorrow_icon_url = weather_icon_replace(ctx['weather_info'].day_after_tomorrow_icon_url) ctx['has_weather'] = True else: ctx['has_weather'] = False return ""
def _relay_fiction_reply(request, board_name, article_id): ''' 이벤트용 임시 답글 함수. @type request: Django Request @param request: Request @type board_name: string @param board_name: reply를 달고자 하는 글이 있는 board name @type article_id: string (int) @param article_id: reply를 달고자 하는 글의 번호 @rtype: int @return: reply 가 달리는 글의 root id ''' server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) reply_dic = {} color = request.POST.get('color', '#000000') reply_dic['content'] = '<font color=\"' + color + '\">' + request.POST.get('content', '') + '</font>' reply_dic['title'] = request.POST.get('title', '') reply_dic['heading'] = request.POST.get('heading', '') # TODO: HEADING !! root_id = request.POST.get('root_id', '') use_signature = request.POST.get('signature_check', None) if use_signature: reply_dic['content'] += '\n\n' + request.POST.get('signature', '') article_id = server.article_manager.write_reply(sess, board_name, int(article_id), WrittenArticle(**reply_dic)) return root_id
def rss(request, board_name): ''' 주어진 게시판에 대한 RSS 파일을 제공한다. @type request: Django Request @param request: Request @type board_name: string @param board_name: 검색하려는 글이 있는 board name ''' from django.utils import feedgenerator server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) feed = feedgenerator.Atom1Feed(title = u'ARA/%s' % board_name, link = u'/board/%s/rss/' % board_name, description = u'A RSS of all articles in %s board' % board_name) page_no = 1 page_length = 20 article_list = server.article_manager.article_list(sess, board_name, None, page_no, page_length, True).hit fake_author(article_list, False) for article in article_list: if article.heading: article_title = u'[%s] %s' % (article.heading, article.title) else: article_title = u'%s' % article.title feed.add_item(title=article_title, link=u'/board/%s/%d/' % (board_name, article.id), author_name=article.author_nickname, pubdate=datetime.datetime.fromtimestamp(article.date), description=u'author : %s date : %s' % (article.author_nickname, datetime.datetime.fromtimestamp(article.date))) return HttpResponse(feed.writeString('utf-8'), mimetype=feedgenerator.Atom1Feed.mime_type)
def read(request, message_list_type, message_id): server = warara_middleware.get_server() sess, _ = warara.check_logged_in(request) r = {} r['logged_in'] = True r['page_length'] = request.GET.get('page_length', 10) r['page_no'] = request.GET.get('page_no', 1) message_id = int(message_id) if message_list_type == 'inbox': r['message'] = server.messaging_manager.read_received_message( sess, message_id) elif message_list_type == 'outbox': r['message'] = server.messaging_manager.read_sent_message( sess, message_id) r['message'].sent_time = datetime.datetime.fromtimestamp( r['message'].sent_time) r['message_id'] = message_id r['message_list_type'] = message_list_type if message_list_type == 'inbox': r['person_type'] = 'sender' r['person'] = r['message'].from_ elif message_list_type == 'outbox': r['person_type'] = 'receiver' r['person'] = r['message'].to rendered = render_to_string('message/read.html', r) return HttpResponse(rendered)
def password_recovery(request, username, token_code): sess, r = warara.check_logged_in(request) server = warara_middleware.get_server() if r['logged_in'] == True: raise InvalidOperation("Already logged in!") if request.method == 'POST': new_password = request.POST.get('password', '') new_password_check = request.POST.get('re_password', '') error_msg = '' if new_password != new_password_check: error_msg = 'Passwords are not agree.' if new_password == '': error_msg = 'Password cannot be empty.' if error_msg: return HttpResponse('<script>alert("%s"); history.back(); </script>' % error_msg) user_password_dic = {'username':username, 'current_password':u'', 'new_password':new_password} try: server.member_manager.modify_password_with_token(UserPasswordInfo(**user_password_dic), token_code) except InvalidOperation, e: return HttpResponse('<script>alert("%s"); history.back(); </script>' % e.why) return HttpResponseRedirect("/")
def index(request): server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) category_list = server.board_manager.get_category_list() r['category_list'] = category_list + [{'category_name':'None'}] board_list = server.board_manager.get_board_list() for board in board_list: for category in category_list: if board.category_id == category.id: board.category_name = category.category_name r['board_list'] = board_list bbs_managers_list = [] for board in board_list: bbs_managers = server.board_manager.get_bbs_managers(board.board_name) bbs_managers_list.append({'board': board, 'managers': bbs_managers}) r['bbs_managers_list'] = bbs_managers_list # TODO: 배너를 단순히 나열하기보다는 배너의 날짜 등을 함께 표시하는 것이 어떨까? banner_list = server.notice_manager.list_banner(sess) r['banner_list'] = banner_list rendered = render_to_string('sysop/index.html', r) return HttpResponse(rendered)
def write_(request, board_name): server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) article_dic = {} r['url'] = ''.join(['/board/', board_name, '/']) article_dic['content'] = request.POST.get('text', '') use_signature = request.POST.get('signature_check', None) if use_signature: article_dic['content'] += '\n\n' + request.POST.get('signature', '') article_dic['title'] = request.POST.get('title', '') article_dic['heading'] = request.POST.get('heading', '') # Heading !!! if request.POST.get('write_type', 0) == 'modify': article_no = request.POST.get('article_no', 0) article_id = server.article_manager.modify_article(sess, board_name, int(article_no), WrittenArticle(**article_dic)) delete_file = request.POST.get('delete_file', 0) #delete_file if delete_file: delete_file = delete_file[1:] delete_file = delete_file.split('&') for file_id in delete_file: file = server.file_manager.delete_file(sess, int(article_no), int(file_id)) os.remove("%s/%s/%s" % (FILE_DIR, file.file_path, file.saved_filename)) else: article_id = server.article_manager.write_article(sess, board_name, WrittenArticle(**article_dic)) #upload file if request.FILES: _upload_file(server, sess, article_id, request.FILES) if request.POST.get('write_type', 0) == 'modify': return HttpResponseRedirect('/board/%s/%s#%s' % (board_name, request.POST.get('root_id', article_id), article_id)) else: return HttpResponseRedirect('/board/%s/%s' % (board_name, str(article_id)))
def read_root(request, board_name, article_id): ''' 주어진 게시판의 주어진 글이 답글인 경우 root글의 주소로 읽어온다. @type request: Django Request @param request: Request @type board_name: string @param board_name: 읽고자 하는 글이 있는 Board Name @type article_id: string (int) @param article_id: 읽고자 하는 글의 번호 ''' server = warara_middleware.get_server() # sess, r = warara.check_logged_in(request) # r['mode'] = 'board' article_list = server.article_manager.read_article(sess, board_name, int(article_id)) root_article_id = article_list[0].root_id # 글의 정보를 r 에 저장 _read(request, r, sess, board_name, root_article_id) # 화면 하단의 글목록의 정보를 r 에 저장 get_article_list(request, r, 'read') fake_author(r['article_read_list']) fake_author(r['article_list'], False) rendered = render_to_string('board/read.html', r) return HttpResponse(rendered)
def _relay_fiction_reply(request, board_name, article_id): ''' 이벤트용 임시 답글 함수. @type request: Django Request @param request: Request @type board_name: string @param board_name: reply를 달고자 하는 글이 있는 board name @type article_id: string (int) @param article_id: reply를 달고자 하는 글의 번호 @rtype: int @return: reply 가 달리는 글의 root id ''' server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) reply_dic = {} color = request.POST.get('color', '#000000') reply_dic['content'] = '<font color=\"' + color + '\">' + request.POST.get( 'content', '') + '</font>' reply_dic['title'] = request.POST.get('title', '') reply_dic['heading'] = request.POST.get('heading', '') # TODO: HEADING !! root_id = request.POST.get('root_id', '') use_signature = request.POST.get('signature_check', None) if use_signature: reply_dic['content'] += '\n\n' + request.POST.get('signature', '') article_id = server.article_manager.write_reply( sess, board_name, int(article_id), WrittenArticle(**reply_dic)) return root_id
def send_password_recovery_email(request): sess, r = warara.check_logged_in(request) server = warara_middleware.get_server() if r['logged_in'] == True: raise InvalidOperation("Already logged in!") if request.method == 'POST': username = request.POST.get('username_field', '') email = request.POST.get('email_field', '') error_msg = '' if not username: error_msg = 'Username field is empty.' if not email: error_msg = 'Email field is empty.' if error_msg: return HttpResponse( '<script>alert("%s"); history.back(); </script>' % error_msg) try: server.member_manager.send_password_recovery_email(username, email) resp = "We sent e-mail to your e-mail address. Please check your inbox." except InvalidOperation, e: resp = e.why return HttpResponse('<script>alert("%s"); history.back(); </script>' % resp)
def password_recovery(request, username, token_code): sess, r = warara.check_logged_in(request) server = warara_middleware.get_server() if r['logged_in'] == True: raise InvalidOperation("Already logged in!") if request.method == 'POST': new_password = request.POST.get('password', '') new_password_check = request.POST.get('re_password', '') error_msg = '' if new_password != new_password_check: error_msg = 'Passwords are not agree.' if new_password == '': error_msg = 'Password cannot be empty.' if error_msg: return HttpResponse( '<script>alert("%s"); history.back(); </script>' % error_msg) user_password_dic = { 'username': username, 'current_password': u'', 'new_password': new_password } try: server.member_manager.modify_password_with_token( UserPasswordInfo(**user_password_dic), token_code) except InvalidOperation, e: return HttpResponse( '<script>alert("%s"); history.back(); </script>' % e.why) return HttpResponseRedirect("/")
def account_modify(request): session_key, r = warara.check_logged_in(request) server = warara_middleware.get_server() account = server.member_manager.get_info(session_key) if request.method == 'POST': nickname = request.POST['mynickname'] signature = request.POST['mysig'] introduction = request.POST['myintroduce'] language = request.POST['mylanguage'] campus = request.POST['mycampus'] listing_mode = int(request.POST['mylistingmode']) modified_information_dic = { 'nickname': nickname, 'signature': signature, 'self_introduction': introduction, 'default_language': language, 'widget': 0, 'layout': 0, 'campus': campus, 'listing_mode': listing_mode } server.member_manager.modify_user( session_key, UserModification(**modified_information_dic)) if language == "kor": request.session["django_language"] = "ko" elif language == "eng": request.session["django_language"] = "en" return HttpResponseRedirect("/account/") else: account.logged_in = True rendered = render_to_string('account/myaccount_modify.html', account.__dict__) return HttpResponse(rendered)
def _reply(request, board_name, article_id): ''' 주어진 게시판의 주어진 글에 실제로 reply 를 단다. @type request: Django Request @param request: Request @type board_name: string @param board_name: reply를 달고자 하는 글이 있는 board name @type article_id: string (int) @param article_id: reply를 달고자 하는 글의 번호 @rtype: int @return: reply 가 달리는 글의 root id ''' server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) reply_dic = {} reply_dic['content'] = request.POST.get('content', '') reply_dic['title'] = request.POST.get('title', '') reply_dic['heading'] = request.POST.get('heading', '') # TODO: HEADING !! root_id = request.POST.get('root_id', '') use_signature = request.POST.get('signature_check', None) if use_signature: reply_dic['content'] += '\n\n' + request.POST.get('signature', '') article_id = server.article_manager.write_reply(sess, board_name, int(article_id), WrittenArticle(**reply_dic)) #upload file if request.FILES: _upload_file(server, sess, article_id, request.FILES) return root_id
def register(request): sess, r = warara.check_logged_in(request) server = warara_middleware.get_server() if r['logged_in'] == True: raise InvalidOperation("Already logged in!") if request.method == 'POST': username = request.POST['id'] password = request.POST['password'] nickname = request.POST['nickname'] email = request.POST['email'] signature = request.POST['sig'] introduction = request.POST['introduce'] language = request.POST['language'] campus = request.POST['campus'] user_information_dict = { 'username': username, 'password': password, 'nickname': nickname, 'email': email, 'signature': signature, 'self_introduction': introduction, 'default_language': language, 'campus': campus } message = server.member_manager.register_( UserRegistration(**user_information_dict)) return HttpResponseRedirect("/main/") rendered = render_to_string('account/register.html', r) return HttpResponse(rendered)
def send_password_recovery_email(request): sess, r = warara.check_logged_in(request) server = warara_middleware.get_server() if r['logged_in'] == True: raise InvalidOperation("Already logged in!") if request.method == 'POST': username = request.POST.get('username_field', '') email = request.POST.get('email_field', '') error_msg = '' if not username: error_msg = 'Username field is empty.' if not email: error_msg = 'Email field is empty.' if error_msg: return HttpResponse('<script>alert("%s"); history.back(); </script>' % error_msg) try: server.member_manager.send_password_recovery_email(username, email) resp = "We sent e-mail to your e-mail address. Please check your inbox." except InvalidOperation, e: resp = e.why return HttpResponse('<script>alert("%s"); history.back(); </script>' % resp)
def refresh_weather(request): server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) server.bot_manager.refresh_weather_info() return HttpResponseRedirect('/sysop/')
def delete(request): if request.method == 'POST': username = request.POST['username'] server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) server.blacklist_manager.delete_blacklist(sess, username) return HttpResponseRedirect("/blacklist/")
def file_download(request, board_name, article_root_id, article_id, file_id): server = warara_middleware.get_server() file = server.file_manager.download_file(int(article_id), int(file_id)) file_path = "%s/%s/%s" % (FILE_DIR, file.file_path, file.saved_filename) file_ob = open(file_path, 'rb') response = HttpResponse(file_ob.read()) file_ob.close() type, encoding = mimetypes.guess_type(file.real_filename) if type is None: type = 'application/octet-stream' response['Content-Type'] = type response['Content-Length'] = str(os.stat(file_path).st_size) if encoding is not None: response['Content-Encoding'] = encoding if u'WebKit' in request.META['HTTP_USER_AGENT']: filename_header = 'filename="%s"' % file.real_filename.encode('utf-8') elif u'MSIE' in request.META['HTTP_USER_AGENT']: filename_header = '' else: filename_header = 'filename*=UTF-8\'\'%s' % urllib.quote( file.real_filename.encode('utf-8')) response['Content-Disposition'] = 'attachment; ' + filename_header return response
def check_logged_in(request): r = {} if "arara_session_key" in request.session: sess = request.session['arara_session_key'] username = request.session['arara_username'] checksum = hashlib.sha1(sess+"@"+username).hexdigest() if request.COOKIES.get('arara_checksum', '') != checksum: from warara import warara_middleware server = warara_middleware.get_server() User_Info = server.member_manager.get_info(sess) server.login_manager.debug__check_session(sess, username, request.META['REMOTE_ADDR'], User_Info) request.session.flush() sess = "" r['logged_in'] = False r['username'] = "" request.session['django_language']="en" else: r['arara_session'] = sess r['logged_in'] = True r['username'] = request.session.get('arara_username', 0); else: sess = "" r['logged_in'] = False r['username'] = "" request.session['django_language']="en" return sess, r
def count_new_message(request): server = warara_middleware.get_server() sess, _ = warara.check_logged_in(request) try: result = server.messaging_manager.get_unread_message_count(sess) return HttpResponse(str(result)) except: return HttpResponse("0")
def do_get_board_alias(value): "Get board name and board alias" server = warara_middleware.get_server() board_alias = cache.get('board_alias.' + value) if not board_alias: board_alias = server.board_manager.get_board(value).board_alias cache.set('board_alias.' + value, board_alias, CACHETIME_BOARD_ALIAS) return board_alias
def do_get_board_description(value, arg): "Get board name and board description" server = warara_middleware.get_server() board_description = cache.get('board_description.' + value) if not board_description: board_description = server.board_manager.get_board(value).board_description cache.set('board_description.' + value, board_description, CACHETIME_BOARD_DESCRIPTION) return board_description
def mobile_main(request): server = warara_middleware.get_server() sess, ctx = warara.check_logged_in(request) # Set username if user is guest if ctx['username'] == '': ctx['username'] = '******' # Get the today best list ret = cache.get('today_best_list') if not ret: ret = server.article_manager.get_today_best_list(5) for item in ret: item.date = datetime.datetime.fromtimestamp(item.date) cache.set('today_best_list', ret, 60) # TODO: Change the key 'todays_best_list' to 'today_best_list' # in both here and Template file. ctx['todays_best_list'] = enumerate(ret) # Get the weekly-best list ret = cache.get('weekly_best_list') if not ret: ret = server.article_manager.get_weekly_best_list(5) for item in ret: item.date = datetime.datetime.fromtimestamp(item.date) cache.set('weekly_best_list', ret, 60) ctx['weekly_best_list'] = enumerate(ret) # Get the today most list ret = cache.get('today_most_list') if not ret: ret = server.article_manager.get_today_most_list(5) for item in ret: item.date = datetime.datetime.fromtimestamp(item.date) cache.set('today_most_list', ret, 60) # TODO: Change the key 'todays_best_list' to 'today_best_list' # in both here and Template file. ctx['todays_most_list'] = enumerate(ret) # Get the weekly-best list ret = cache.get('weekly_most_list') if not ret: ret = server.article_manager.get_weekly_most_list(5) for item in ret: item.date = datetime.datetime.fromtimestamp(item.date) cache.set('weekly_most_list', ret, 60) ctx['weekly_most_list'] = enumerate(ret) # Get messages for the current user if ctx['logged_in']: unread_message_count = server.messaging_manager.get_unread_message_count(sess) if unread_message_count > 0: ctx['new_message'] = True else: ctx['new_message'] = False rendered = render_to_string('mobile/main.html', ctx) return HttpResponse(rendered)
def main(request): server = warara_middleware.get_server() sess, ctx = warara.check_logged_in(request) # TODO: rename all 'r' variables to 'ctx' that means 'context'. # Set username if user is guest if ctx['username'] == '': ctx['username'] = '******' # Get the today best list ret = cache.get('today_best_list') if not ret: ret = server.article_manager.get_today_best_list(5) for item in ret: item.date = datetime.datetime.fromtimestamp(item.date) cache.set('today_best_list', ret, 60) # TODO: Change the key 'todays_best_list' to 'today_best_list' # in both here and Template file. ctx['todays_best_list'] = enumerate(ret) # Get the weekly-best list ret = cache.get('weekly_best_list') if not ret: ret = server.article_manager.get_weekly_best_list(5) for item in ret: item.date = datetime.datetime.fromtimestamp(item.date) cache.set('weekly_best_list', ret, 60) ctx['weekly_best_list'] = enumerate(ret) # Get recent article list of boards ctx['recent_articles'] = OrderedDict() for board in MAIN_BOARDS: try: ctx['recent_articles'][ board] = server.article_manager.recent_article_list(board) except InvalidOperation: pass # Get messages for the current user if ctx['logged_in']: unread_message_count = server.messaging_manager.get_unread_message_count( sess) if unread_message_count > 0: ctx['new_message'] = True else: ctx['new_message'] = False # Get banner try: ctx['banner'] = server.notice_manager.get_banner() ctx['has_banner'] = True except InvalidOperation: ctx['has_banner'] = False # Ksearch ctx['KSEARCH_ENABLED'] = KSEARCH_ENABLED rendered = render_to_string('main.html', ctx) return HttpResponse(rendered)
def account(request): session_key, r = warara.check_logged_in(request) server = warara_middleware.get_server() account = server.member_manager.get_info(session_key) account.last_logout_time = timestamp2datetime(account.last_logout_time) account.logged_in = True rendered = render_to_string('account/myaccount_frame.html', account.__dict__) return HttpResponse(rendered)
def destroy(request, board_name, root_id, article_no): server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) server.article_manager.destroy_article(sess, board_name, int(article_no)) # XXX 2010.05.14. # 글을 destroy하였으므로 해당 보드로 돌아간다. # 추후에는 pageno 정보를 이용하도록 수정하는 게 좋겠다. # 어차피 지금은 SYSOP 이 아니면 이 작업을 할 수 없지만. return HttpResponseRedirect('/board/%s/' % board_name)
def file_download(request, board_name, article_root_id, article_id, file_id): server = warara_middleware.get_server() file = {} file= server.file_manager.download_file(int(article_id), int(file_id)) file_ob = open("%s/%s/%s" % (FILE_DIR, file.file_path, file.saved_filename)) response = HttpResponse(file_ob, mimetype="application/x-forcedownload") response['Content-Disposition'] = "attachment; filename=" + unicode(file.real_filename).encode('cp949', 'replace') return response
def unscrap(request, board_name, root_id, article_no): server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) try: server.article_manager.unscrap_article(sess, int(article_no)) response = HttpResponse("OK") except InvalidOperation, e: response = HttpResponse("NOT_SCRAPPED")
def main(request): server = warara_middleware.get_server() sess, ctx = warara.check_logged_in(request) # TODO: rename all 'r' variables to 'ctx' that means 'context'. # Set username if user is guest if ctx['username'] == '': ctx['username'] = '******' # Get the today best list ret = cache.get('today_best_list') if not ret: ret = server.article_manager.get_today_best_list(5) for item in ret: item.date = datetime.datetime.fromtimestamp(item.date) cache.set('today_best_list', ret, 60) # TODO: Change the key 'todays_best_list' to 'today_best_list' # in both here and Template file. ctx['todays_best_list'] = enumerate(ret) # Get the weekly-best list ret = cache.get('weekly_best_list') if not ret: ret = server.article_manager.get_weekly_best_list(5) for item in ret: item.date = datetime.datetime.fromtimestamp(item.date) cache.set('weekly_best_list', ret, 60) ctx['weekly_best_list'] = enumerate(ret) # Get recent article list of boards ctx['recent_articles'] = OrderedDict() for board in MAIN_BOARDS: try: ctx['recent_articles'][board] = server.article_manager.recent_article_list(board) except InvalidOperation: pass # Get messages for the current user if ctx['logged_in']: unread_message_count = server.messaging_manager.get_unread_message_count(sess) if unread_message_count > 0: ctx['new_message'] = True else: ctx['new_message'] = False # Get banner try: ctx['banner'] = server.notice_manager.get_banner() ctx['has_banner'] = True except InvalidOperation: ctx['has_banner'] = False # Ksearch ctx['KSEARCH_ENABLED'] = KSEARCH_ENABLED rendered = render_to_string('main.html', ctx) return HttpResponse(rendered)
def get_various_info(request, r): server = warara_middleware.get_server() sess, _ = warara.check_logged_in(request) page_no = r['page_no'] page_no = int(page_no) page_range_length = 10 r['next'] = 'a' r['prev'] = 'a' r['next_group'] = 'a' r['prev_group'] = 'a' r['nmpp'] = 10 #number of message per page r['mppp'] = 10 #number of pagegroup per page page_group_no = math.ceil(float(page_no) / page_range_length) r['page_num'] = r['message_result'].last_page r['num_message'] = r['message_result'].results page_o = Paginator([x + 1 for x in range(r['page_num'])], 10) if page_o.num_pages < page_group_no: page_group_no = page_o.num_pages r['page_list'] = page_o.page(page_group_no).object_list if page_o.page(page_group_no).has_next(): r['next_page_group'] = { 'mark': r['next'], 'no': page_o.page( page_o.page(page_group_no).next_page_number()).start_index() } r['last_page'] = {'mark': r['next_group'], 'no': r['page_num']} if page_o.page(page_group_no).has_previous(): r['prev_page_group'] = { 'mark': r['prev'], 'no': page_o.page( page_o.page(page_group_no).previous_page_number()).end_index() } r['first_page'] = {'mark': r['prev_group'], 'no': 1} r['message_no_strlist'] = '' for message in r['message_list']: r['message_no_strlist'] = '|'.join( [r['message_no_strlist'], str(message.id)]) r['page_length_list'] = [5, 10, 20] r['time_now'] = datetime.datetime.now() for i, message in enumerate(r['message_list']): if message.sent_time.strftime('%Y%m%d') == r['time_now'].strftime( '%Y%m%d'): r['message_list'][i].time = message.sent_time.strftime('%H:%M:%S') else: r['message_list'][i].time = message.sent_time.strftime('%Y/%m/%d') return r
def confirm_user(request, username, confirm_key): server = warara_middleware.get_server() try: server.member_manager.confirm(username, confirm_key) return HttpResponseRedirect("/main/") except InvalidOperation: return HttpResponse('<script>alert("Confirm failed! \\n\\n -Wrong confirm key? \\n -Already confirmed?\\n -Wrong username?");</script>') except InternalError: return HttpResponse('<script>alert("Confirm failed! \\n\\nPlease contact ARA SYSOP.");</script>')
def list(request, board_name): server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) r['mode'] = 'board' r['board_name'] = board_name get_article_list(request, r, 'list') fake_author(r['article_list'], False) rendered = render_to_string('board/list.html', r) return HttpResponse(rendered)
def list(request, board_name): server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) r['mode'] = 'board' r['board_name'] = board_name get_article_list(request, r, 'list') fake_author(r['article_list'], False) rendered = render_to_string('mobile/board/list.html', r) return HttpResponse(rendered)
def list(request): server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) # board_name 이 없기 때문에 사용한 Hack. r['board_name'] = u'All Articles' r['mode'] = 'all' warara.mobile.board.views.get_article_list(request, r, 'total_list') fake_author(r['article_list'], False) rendered = render_to_string('mobile/board/list.html', r) return HttpResponse(rendered)
def hide_board(request): """ request 에 주어진 hide_board_name 의 보드를 숨긴다. """ server = warara_middleware.get_server() sess, r = warara.check_logged_in(request) board_list = server.board_manager.get_board_list() for board in board_list: if request.POST.get(board.board_name, None): msg = server.board_manager.hide_board(sess, board.board_name) return HttpResponseRedirect('/sysop/')
def _ajax_calling(response): ''' ajax 사용 시 보낼 갱신된 보드 정보(html 태그 포함)를 완성해 돌려준다. ''' server = warara_middleware.get_server() board_list = server.board_manager.get_board_list() for board in board_list: bbs_managers = server.board_manager.get_bbs_managers(board.board_name) managers_string = "".join(("*"+manager.username+" " for manager in bbs_managers)) response += "\n" + board.board_name + "\t" + board.alias + "\t" + board.board_description + "\t" + ("hidden_board" if board.hide else "showing_board") + "\t" + str(board.to_read_level) + "\t" + str(board.to_write_level) + "\t" + managers_string + '\t ' return response
def file_download(request, board_name, article_root_id, article_id, file_id): server = warara_middleware.get_server() file = {} file = server.file_manager.download_file(int(article_id), int(file_id)) file_ob = open("%s/%s/%s" % (FILE_DIR, file.file_path, file.saved_filename)) response = HttpResponse(file_ob, mimetype="application/x-forcedownload") response['Content-Disposition'] = "attachment; filename=" + unicode( file.real_filename).encode('cp949', 'replace') return response
def save_selected_boards(request): sess, r = warara.check_logged_in(request) server = warara_middleware.get_server() all_boards = server.board_manager.get_board_list() query = request.POST.get('boards', '') s_boards = query.split('/') s_boards_id = [x.id for x in all_boards if x.board_name in s_boards] server.member_manager.set_selected_boards(sess, s_boards_id) return HttpResponseRedirect("/mobile/board/list/")
def logout(request): session_key, r = warara.check_logged_in(request) server = warara_middleware.get_server() account = server.login_manager.logout(session_key) del request.session['arara_session_key'] del request.session['arara_username'] del request.session['arara_userid'] request.session.clear() response = HttpResponseRedirect('/mobile/') response.delete_cookie('arara_checksum') return response