def get(self): bbs = db.get(self.request.get("bbs_key")) user = users.get_current_user() entry = db.get(self.request.get("entry_key")) entry_owner=False if(user and user.user_id()==entry.user_id): entry_owner=True bbs_owner=not OwnerCheck.check(bbs,user) if(not bbs_owner and not OwnerCheck.is_admin(user) and not entry_owner): self.response.out.write(Alert.alert_msg("削除する権限がありません。",self.request.host)) return entry.del_flag = 0 entry.put() thread = db.get(self.request.get("thread_key")) thread.comment_cnt=thread.comment_cnt-1 thread.cached_entry_key=[] thread.cached_entry_key_enable=None thread.put() url=MappingThreadId.get_thread_url("./",bbs,thread)+"?comment_edit=1" self.redirect(str(url)) RecentCommentCache.invalidate(bbs)
def post(self): bbs=db.get(self.request.get("bbs_key")); try: thread=db.get(self.request.get("thread_key")) except: thread=None try: entry=db.get(self.request.get("entry_key")) except: entry=None try: res=db.get(self.request.get("res_key")) except: res=None user = users.get_current_user() bbs_owner=not OwnerCheck.check(bbs,user) thread_owner=False if(user): if(thread and user.user_id()==thread.user_id): thread_owner=True if(entry and user.user_id()==entry.user_id): thread_owner=True if(res and user.user_id()==res.user_id): thread_owner=True if(not bbs_owner and not thread_owner and not OwnerCheck.is_admin(user)): Alert.alert_msg_with_write(self,"更新する権限がありません。"); return if(thread): if(self.update_thread(bbs,thread,user)): return if(entry): if(self.update_entry(entry,user)): return thread=entry.thread_key if(res): entry=db.get(self.request.get("res_entry_key")) if(self.update_res(res,entry,user)): return thread=entry.thread_key url=MappingThreadId.get_thread_url("./",bbs,thread) if(entry or res): url=url+"?comment_edit=1" self.redirect(str(url))
def get(self): SetUtf8.set() user = users.get_current_user() if(not user): self.response.out.write(Alert.alert_msg("ログインしている必要があります。",self.request.host)); return; thread=None try: thread = db.get(self.request.get("thread_key")) except: thread=None if(not thread): self.response.out.write(Alert.alert_msg("スレッドが見つかりません。",self.request.host)); return mode = self.request.get("mode") if(not thread.tag_list): thread.tag_list=[] tag=self.request.get("tag") if(tag==""): self.response.out.write(Alert.alert_msg("タグを入力して下さい。",self.request.host)); return; if(mode=="add"): if(thread.tag_list.count(tag)>0): thread.tag_list.remove(tag) thread.tag_list.insert(0,tag) else: thread.tag_list.insert(0,tag) tag_info="[Add Tag] "+tag+" "+str(user.user_id())+" "+user.email() thread.tag_last_edit=tag thread.tag_last_edit_user_id=str(user.user_id()) logging.info(tag_info) else: try: thread.tag_list.remove(tag) except: self.response.out.write(Alert.alert_msg("タグ"+tag+"が見つかりません。",self.request.host)); thread.put() bbs=db.get(self.request.get("bbs_key")) thread=db.get(self.request.get("thread_key")) url=MappingThreadId.get_thread_url("./",bbs,thread) self.redirect(str(url))
def get(self): bbs = db.get(self.request.get("bbs_key")) user = users.get_current_user() if(OwnerCheck.check(bbs,user)): return entry = db.get(self.request.get("entry_key")) if(entry.hidden_flag): entry.hidden_flag = 0 else: entry.hidden_flag = 1 entry.put() thread = db.get(self.request.get("thread_key")) url=MappingThreadId.get_thread_url("./",bbs,thread) self.redirect(str(url))
def get(self): entry = db.get(self.request.get("entry_key")) if(self.request.get("res_key")=="all"): res=None else: res= db.get(self.request.get("res_key")) thread_key=entry.thread_key bbs_key=thread_key.bbs_key user = users.get_current_user() bbs_owner =not OwnerCheck.check(bbs_key,user) res_owner=False if(user and res and user.user_id()==res.user_id): res_owner=True if(not bbs_owner and not OwnerCheck.is_admin(user) and not res_owner): self.response.out.write(Alert.alert_msg("削除する権限がありません。",self.request.host)) return if(not res): for res in entry.res_list: db.get(res).delete() entry.res_list=[] else: res.delete() idx = entry.res_list.index(db.Key(self.request.get("res_key"))) entry.res_list.pop(idx) res_n=len(entry.res_list) if(res_n>=1): entry.date=db.get(entry.res_list[res_n-1]).date else: entry.date=entry.create_date entry.put() url=MappingThreadId.get_thread_url("./",bbs_key,thread_key)+"?comment_edit=1" self.redirect(str(url)) thread = db.get(str(thread_key.key())) thread.comment_cnt=thread.comment_cnt-1 thread.put() RecentCommentCache.invalidate(bbs_key)
def post(self): SetUtf8.set() is_english=CssDesign.is_english(self) #エラーコードはFlash向けかどうか is_flash=False if(self.request.get('image')): is_flash=True #書き込み対象のコメントを取得 if(self.request.get("entry_key")): #上書きモード entry = db.get(self.request.get("entry_key")) overwrite = True else: entry = Entry() overwrite = False #コメント if(self.request.get('comment')): entry.content = self.request.get('comment') else: if(self.request.get('image')): entry.content = "" else: if(is_english): self.write_status(is_flash,"Please input comment"); else: self.write_status(is_flash,"コメントを入力して下さい。"); return #名前 if(self.request.get('author')): entry.editor = cgi.escape(self.request.get('author')) else: entry.editor = "no_name" if(is_english): self.write_status(is_flash,"Please input name"); else: self.write_status(is_flash,"名前を入力して下さい。"); return if(not self.request.get('image')): if(self.request.get("seed")!=BbsConst.SUBMIT_SEED): self.write_status(is_flash,"シードが一致しません。"); return if(self.request.get('mail_addr')): entry.mail=self.request.get('mail_addr') else: entry.mail="" if(self.request.get('homepage_addr') and self.request.get('homepage_addr')!="http://"): entry.homepage_addr=self.request.get('homepage_addr') else: entry.homepage_addr="" user = users.get_current_user() thread=db.Key(self.request.get("thread_key")) bbs = db.get(self.request.get("bbs_key")) if(SpamCheck.check_all(self,entry.content,self.request.get("remote_host"),user,bbs,is_flash,is_english)): return #二重投稿ブロック if(entry.content!="" and memcache.get("add_entry_double_block")==entry.content): if(is_flash): self.write_status(is_flash,"二重投稿を検出しました。時間を置いて、再度、投稿して下さい。"); else: url=MappingThreadId.get_thread_url("./",bbs,db.get(self.request.get("thread_key"))) self.redirect(str(url)) return #コメント禁止 if(db.get(thread).prohibit_comment): self.write_status(is_flash,"このイラストへのコメントは禁止されています。"); return #書き込み権限確認 if(bbs.comment_login_require): if(not(user)): self.write_status(is_flash,"この掲示板ではコメントする際にログインが必須です。"); return #上書き権限確認 if(overwrite): bbs=db.get(self.request.get("bbs_key")) if(OwnerCheck.check(bbs,user)): if(user and entry.user_id!=user.user_id()): self.write_status(is_flash,"上書き投稿する権限がありません。"); return #イラストの設定 delete_thread_image=None if(self.request.get('image')): if(overwrite): delete_thread_image=entry.illust_reply_image_key timage=ThreadImage() timage.bbs_key=bbs if(self.request.get("base64") and self.request.get("base64")=="1"): timage.image=db.Blob(base64.b64decode(self.request.get("image"))) timage.thumbnail=db.Blob(base64.b64decode(self.request.get("thumbnail"))) else: timage.image=db.Blob(self.request.get("image")) timage.thumbnail=db.Blob(self.request.get("thumbnail")) timage.thumbnail2=None timage.illust_mode=1; try: timage.put() except: if(is_english): self.write_status(is_flash,"Too big image"); else: self.write_status(is_flash,"画像サイズが大きすぎます。"); return entry.illust_reply=1 entry.illust_reply_image_key=timage else: entry.content=cgi.escape(entry.content) entry.content=EscapeComment.auto_link(entry.content) entry.content=EscapeComment.escape_br(entry.content) entry.thread_key = thread entry.bbs_key = bbs entry.del_flag = 1 if(self.request.get("regulation")): entry.adult=int(self.request.get("regulation")) #プロフィールにリンクするか link_to_profile=StackFeed.is_link_to_profile(self) if(link_to_profile and user): entry.user_id=user.user_id() #スレッドを取得 thread = db.get(self.request.get("thread_key")) #基本情報を設定 if(not overwrite): self.set_basic_info(entry,thread) #保存 if(not SyncPut.put_sync(entry)): message="コメントの投稿は成功しましたが表示が遅延しています。反映まで数分お待ちください。" memcache.set(BbsConst.OBJECT_THREAD_MESSAGE_HEADER+str(thread.key()),message,BbsConst.OBJECT_THREAD_MESSAGE_CACHE_TIME) memcache.set(BbsConst.OBJECT_BBS_MESSAGE_HEADER+str(bbs.key()),message,BbsConst.OBJECT_BBS_MESSAGE_CACHE_TIME) #スレッドと掲示板の情報を更新 if(not overwrite): self.update_thread_and_bbs_information(thread,bbs,entry) #上書き投稿時の昔のイラストの削除 if(delete_thread_image): delete_thread_image.delete() #ステータスコードを出力 if(self.request.get('image')): self.response.headers ['Content-type'] = "text/html;charset=utf-8" self.response.out.write("success") else: url=MappingThreadId.get_thread_url("./",bbs,thread) if(self.request.get("redirect_url")): url=self.request.get("redirect_url") self.redirect(str(url)) #二重投稿ブロック memcache.set("add_entry_double_block",self.request.get("comment"),30) #ランキング is_owner=False if(thread.user_id and entry.user_id and thread.user_id == entry.user_id): is_owner=True if(not is_owner): #自分のスレッドへのコメントはランキングに反映しない Ranking.add_rank_global(thread,BbsConst.SCORE_ENTRY) #フィード if(not link_to_profile): user=None try: StackFeed.feed_new_comment_thread(user,thread,entry) except: logging.error("new entry stackfeed add error")
def post(self): SetUtf8.set() is_english=CssDesign.is_english(self) entry=None try: entry = db.get(self.request.get("entry_key")) except: entry=None if(not entry): Alert.alert_msg_with_write(self,"エントリーが見つかりません。"); return thread_key=entry.thread_key bbs_key=thread_key.bbs_key #スパムチェック if(self.request.get("seed")!=BbsConst.SUBMIT_SEED): Alert.alert_msg_with_write(self,"シードが一致しません。"); return #コメント禁止 if(thread_key.prohibit_comment): Alert.alert_msg_with_write(self,"このイラストへのコメントは禁止されています。"); return #書き込み権限チェック user = users.get_current_user() if(bbs_key.comment_login_require): if(not(user)): Alert.alert_msg_with_write(self,"この掲示板ではコメントする際にログインが必須です。"); return response = Response() if(self.request.get('comment')): response.content = cgi.escape(self.request.get('comment')) else: Alert.alert_msg_with_write(self,"コメントを入力して下さい。"); return #二重投稿ブロック if(response.content!="" and memcache.get("add_res_double_block")==response.content): url=MappingThreadId.get_thread_url("./",bbs_key,thread_key) self.redirect(str(url)) return is_flash=False if(SpamCheck.check_all(self,response.content,self.request.get("remote_host"),user,bbs_key,is_flash,is_english)): return response.content=EscapeComment.escape_br(response.content) response.content=EscapeComment.auto_link(response.content) if(self.request.get('author')): try: response.editor = cgi.escape(self.request.get('author')) except: Alert.alert_msg_with_write(self,"名前に改行は使用できません。"); return else: response.editor = "no_name" if(is_english): Alert.alert_msg_with_write(self,"Please input name"); else: Alert.alert_msg_with_write(self,"名前を入力して下さい。"); return #プロフィールにリンクするか link_to_profile=StackFeed.is_link_to_profile(self) if(link_to_profile and user): response.user_id=user.user_id() #コメント番号を設定 response.comment_no=thread_key.comment_cnt+1 response.remote_addr=self.request.remote_addr response.remote_host=self.request.get("remote_host") #レスを書き込み response.put() #レスをコメントに追加 entry.res_list.append(response.key()) entry.last_update_editor = response.editor entry.date=datetime.datetime.today() entry.search_index_version=0 entry.put() #スレッドのコメント数を更新 thread = thread_key thread.comment_cnt = thread.comment_cnt+1 thread.date=datetime.datetime.today() thread.put() #コメント数を更新 if(bbs_key.comment_n) : bbs_key.comment_n=bbs_key.comment_n+1 else: bbs_key.comment_n=1 bbs_key.put() RecentCommentCache.invalidate(bbs_key) #ステータス出力 url=MappingThreadId.get_thread_url("./",bbs_key,thread_key) if(self.request.get("redirect_url")): url=self.request.get("redirect_url") self.redirect(str(url)) #二重投稿ブロック memcache.set("add_res_double_block",self.request.get("comment"),30) #ランキング Ranking.add_rank_global(thread,BbsConst.SCORE_RES) #フィード if(not link_to_profile): user=None try: StackFeed.feed_new_response_entry(user,thread,entry,response) except: logging.error("new res stack feed add error")