def create_room(self,user): if(self.request.get("name")==""): Alert.alert_msg_with_write(self,"ルーム名は必須です。") return if(not user): Alert.alert_msg_with_write(self,"ルームの作成にはログインが必要です。") return user_name=self.get_user_name(user) canvas_size=self.request.get("canvas_size") size=canvas_size.split("x") canvas_width=int(size[0]) canvas_height=int(size[1]) room=ChatRoom() room.name=self.request.get("name") room.user_id=user.user_id() room.user_name=user_name room.command_list="" room.command_cnt=0 room.user_count=0 room.snap_range=0 room.create_date=datetime.datetime.now() room.canvas_width=canvas_width room.canvas_height=canvas_height room.password=self.request.get("pass") room.is_always=0 if(room.password=="always"): room.is_always=1 room.password="" SyncPut.put_sync(room) self.redirect("./chat")
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): is_flash=self.request.get('mode')=="illust" or self.request.get('mode')=="illust_all"; is_english=CssDesign.is_english(self) if(self.request.get('thread_title')==""): if(is_english): self.write_status(is_flash,"Please input title"); else: self.write_status(is_flash,"スレッドタイトルを入力して下さい。"); return if(self.request.get('author')==""): if(is_english): self.write_status(is_flash,"Please input author"); else: self.write_status(is_flash,"投稿者名を入力して下さい。"); return permission_error_str="スレッドを作成する権限がありません。" if(is_english): permission_error_str="Permission denied" login_require="ログインが必要です。" if(is_english): login_require="Login require" bbs = db.get(self.request.get("bbs_key")) user = users.get_current_user() if(not user and self.request.get('mode')=="illust_all"): self.write_status(is_flash,login_require); return if(bbs.bbs_mode==BbsConst.BBS_MODE_ONLY_ADMIN): if(OwnerCheck.check(bbs,user)): self.write_status(is_flash,permission_error_str); return if(bbs.bbs_mode==BbsConst.BBS_MODE_NO_IMAGE): if(bbs.disable_create_new_thread==1): if(OwnerCheck.check(bbs,user)): self.write_status(is_flash,permission_error_str); return if(bbs.disable_create_new_thread==2): if(not user): self.write_status(is_flash,permission_error_str); return if(SpamCheck.check_all(self,self.request.get('thread_title'),self.request.get("remote_host"),user,bbs,is_flash,is_english)): return homepage_addr="" if(self.request.get('homepage_addr') and self.request.get('homepage_addr')!="http://"): homepage_addr=self.request.get('homepage_addr') overwrite_mode=False if(self.request.get("thread_key")): #上書きモード #上書きの場合 overwrite_mode=True new_thread=db.get(self.request.get("thread_key")) if(OwnerCheck.check(bbs,user)): if((not user) or (not new_thread.user_id) or new_thread.user_id!=user.user_id()): if(self.request.get("delete_key")!=new_thread.delete_key or new_thread.delete_key==""): self.write_status(is_flash,"上書きをする権限がありません。"); return; else: #新規作成の場合 new_thread = MesThread() new_thread.put() #キーの確保 new_thread.score = None new_thread.comment_cnt=0 bbs.illust_n=bbs.illust_n+1 bbs.cached_threads_num=None #キャッシュ更新リクエスト bbs.put() #上書きモードの場合は作成日を更新しない new_thread.create_date=datetime.datetime.today() #更新日は更新する new_thread.date=datetime.datetime.today() #各種設定値を書き込み new_thread.illust_mode = int(self.request.get('illust_mode')) new_thread.title = cgi.escape(self.request.get('thread_title')) if(self.request.get('mode')=="illust_all"): new_thread.summary = self.request.get('comment') else: new_thread.summary = cgi.escape(self.request.get('comment')) new_thread.bbs_key = db.Key(self.request.get('bbs_key')) new_thread.summary=EscapeComment.escape_br(new_thread.summary) new_thread.homepage_addr=homepage_addr new_thread.author=self.request.get('author') if(self.request.get("draw_time")): new_thread.draw_time=int(self.request.get("draw_time")) if(self.request.get("delete_key")): new_thread.delete_key=self.request.get("delete_key") if(self.request.get("category")): new_thread.category=self.request.get("category") CategoryList.add_new_category(bbs,new_thread.category) if(self.request.get("event_id")): new_thread.event_id=self.request.get("event_id") if(self.request.get("regulation")): new_thread.adult=int(self.request.get("regulation")) if(self.request.get("dont_show_in_portal")): new_thread.violate_photo=1 if(self.request.get("is_png")): new_thread.is_png=1 else: new_thread.is_png=0 #プロフィールにリンクするか link_to_profile=StackFeed.is_link_to_profile(self) if(link_to_profile and user): new_thread.user_id=user.user_id() #通常投稿モード(MOPER) if(self.request.get('mode')=="illust"): new_thread.image_key=db.get(self.request.get('thread_image')) new_thread.mail=self.request.get('thread_mail') compiled_line = re.compile("(http://[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)") new_thread.summary = compiled_line.sub(r'<a href=\1 TARGET="_blank">\1</a>', new_thread.summary) if(user): new_thread.user_id=user.user_id() #必ずプロフィールにマップ #一括投稿モード(新エディタ) timage=None if((self.request.get('mode')=="illust_all" or self.request.get('mode')=="illust_temp") and new_thread.illust_mode!=BbsConst.ILLUSTMODE_TEXT): timage=ThreadImage() timage.bbs_key=db.get(self.request.get("bbs_key")) if(self.request.get('mode')=="illust_temp"): try: temp_image=db.get(self.request.get("temp_illust_key")) except: temp_image=None if(not temp_image): self.write_status(is_flash,"画像データが見つかりません。") return timage.image=temp_image.image timage.thumbnail=temp_image.thumbnail else: 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"))) new_thread.is_ipad=1 else: timage.image=db.Blob(self.request.get("image")) timage.thumbnail=db.Blob(self.request.get("thumbnail")) if(len(timage.image)<=0 or len(timage.thumbnail)<=0): self.write_status(is_flash,"画像データが不正です。"); return timage.illust_mode=new_thread.illust_mode timage.is_png=new_thread.is_png timage.thumbnail2=None try: timage.put() except: if(is_english): self.write_status(is_flash,"Too big image"); else: self.write_status(is_flash,"画像の容量が大きすぎます。"); return new_thread.image_key=timage ImageFile.invalidate_cache(str(timage.key())) #url assign MappingThreadId.assign(bbs,new_thread,False) #IPアドレスを書き込み new_thread.remote_addr=self.request.remote_addr new_thread.remote_host=self.request.get("remote_host") new_thread.thumbnail2_version=0 new_thread.search_index_version=0 #put if(not SyncPut.put_sync(new_thread)): message="イラストの投稿は成功しましたが表示が遅延しています。反映まで数分お待ちください。" memcache.set(BbsConst.OBJECT_BBS_MESSAGE_HEADER+str(bbs.key()),message,BbsConst.OBJECT_BBS_MESSAGE_CACHE_TIME) #サムネイル更新 if(timage): if(new_thread.adult==0): bbs.cached_thumbnail_key=str(timage.key()) bbs.put() #新着イラストのキャッシュ無効化 RecentCommentCache.invalidate(bbs) #ステータスを出力 if(is_flash): self.write_status(is_flash,"success") else: self.redirect(str('./bbs_index?bbs_key='+self.request.get('bbs_key'))) #feed if(not link_to_profile): user=None url=self.get_thread_url(bbs,new_thread) if(not overwrite_mode): try: StackFeed.feed_new_thread(user,bbs,new_thread) except: logging.error("new thread stack feed add error") #submit thread count if(user): ApiUser.invalidate_thread_count(user.user_id()) #news ApiFeed.invalidate_cache() #Rss RssFeed.invalidate_cache(str(bbs.key()))
def post(self): SetUtf8.set() mode = self.request.get("mode") name = self.request.get("name") profile = self.request.get("profile") homepage = self.request.get("homepage") mail = self.request.get("mail") twitter = self.request.get("twitter") birthday_year = self.request.get("birthday_year") birthday_month = self.request.get("birthday_month") birthday_day = self.request.get("birthday_day") regulation=0 if(self.request.get("regulation_r15_nl")): regulation+=1 if(self.request.get("regulation_r15_bl")): regulation+=2 if(self.request.get("regulation_r15_gl")): regulation+=4 privacy_rental_bbs=1 if(self.request.get("privacy_rental_bbs")): privacy_rental_bbs=0 disable_global_tweet=1 if(self.request.get("privacy_tweet")): disable_global_tweet=0 disable_rankwatch=1 if(self.request.get("privacy_user_ranking")): disable_rankwatch=0 if(disable_global_tweet): cache_id=BbsConst.OBJECT_CACHE_HEADER+BbsConst.OBJECT_TWEET_LIST_HEADER memcache.delete(cache_id) is_english=CssDesign.is_english(self) if(name==""): if(is_english): Alert.alert_msg_with_write(self,"No name"); else: Alert.alert_msg_with_write(self,"名前がありません。"); return #if(profile==""): # Alert.alert_msg_with_write(self,"プロフィールがありません。"); # return user = users.get_current_user() if(not(user)): Alert.alert_msg_with_write(self,"ログインが必要です。"); return bookmark=ApiObject.get_bookmark_of_user_id_for_write(user.user_id()) if(bookmark==None): Alert.alert_msg_with_write(self,"プロフィールの取得に失敗しました。"); return profile = cgi.escape(profile) compiled_line = re.compile("\r\n|\r|\n") profile = compiled_line.sub(r'<br/>', profile) if(mail=="None"): mail="" if(homepage=="None"): homepage="" if(twitter=="None"): twitter="" bookmark.name=name bookmark.profile=profile bookmark.mail=mail bookmark.twitter_id=twitter bookmark.homepage=homepage bookmark.owner=user bookmark.disable_rankwatch=disable_rankwatch bookmark.disable_global_tweet=disable_global_tweet bookmark.regulation=regulation bookmark.privacy_rental_bbs=privacy_rental_bbs if(self.request.get("my_color")=="" or self.request.get("my_color")=="#f2f2f2"): bookmark.my_color=None else: bookmark.my_color=self.request.get("my_color") bookmark.sex=int(self.request.get("sex")) if(birthday_year): try: birthday_year=int(birthday_year) except: if is_english: Alert.alert_msg_with_write(self,"Birthday must be number"); else: Alert.alert_msg_with_write(self,"生まれた年は半角数字である必要があります。"); return else: birthday_year=0 if(birthday_month): try: birthday_month=int(birthday_month) except: if is_english: Alert.alert_msg_with_write(self,"Birthday must be number"); else: Alert.alert_msg_with_write(self,"生まれた月は半角数字である必要があります。"); return else: birthday_month=0 if(birthday_day): try: birthday_day=int(birthday_day) except: if is_english: Alert.alert_msg_with_write(self,"Birthday must be number"); else: Alert.alert_msg_with_write(self,"生まれた日は半角数字である必要があります。"); return else: birthday_day=0 bookmark.birthday_year=birthday_year bookmark.birthday_month=birthday_month bookmark.birthday_day=birthday_day bookmark.icon_mini=None #サムネイルの再作成を要求 bookmark.thumbnail_created=0 age=Pinterest.get_age(bookmark) if(bookmark.regulation and age>=1 and age<=14): Alert.alert_msg_with_write(self,"制限付きコンテンツを表示するには15歳以上である必要があります。"); return if(self.request.get("icon")): bookmark.icon=db.Blob(self.request.get("icon")) img = self.request.body_file.vars['icon'] bookmark.icon_content_type=img.headers['content-type'] if(not ApiObject.create_user_thumbnail(bookmark)): if is_english: Alert.alert_msg_with_write(self,"Too big icon image"); else: Alert.alert_msg_with_write(self,"アイコン画像が大きすぎます。"); return try: SyncPut.put_sync(bookmark) except: Alert.alert_msg_with_write(self,"データストアへの保存に失敗しました。アイコンの容量が1MBを超えている場合は縮小してからアップロードして下さい。"); return self.redirect(str("./mypage"))
def post(self): if(self.request.get('bbs_title')==""): Alert.alert_msg_with_write(self,"タイトルを入力して下さい。"); return if(self.request.get('bbs_summary')==""): Alert.alert_msg_with_write(self,"概要を入力して下さい。"); return user = users.get_current_user() summary = self.request.get('bbs_summary') if(int(self.request.get('official'))==1): Alert.alert_msg_with_write(self,"オフィシャル掲示板は廃止されました。"); return if (not user): if(int(self.request.get('official'))==0): self.redirect(str(users.create_login_url(""))) return #summary = cgi.escape(summary) compiled_line = re.compile("\r\n|\r|\n") summary = compiled_line.sub(r'<br>', summary) short=self.request.get('short') if(MappingId.key_format_check(short)): Alert.alert_msg_with_write(self,"IDは半角英数である必要があります。") return if(MappingId.check_capability(short,"")==0): Alert.alert_msg_with_write(self,"ID:"+short+"は既に登録されています。") return if(short==""): Alert.alert_msg_with_write(self,"IDを入力する必要があります。") return new_bbs = Bbs() new_bbs.official=int(self.request.get('official')) new_bbs.illust_n=0 new_bbs.bbs_name = cgi.escape(self.request.get('bbs_title')) new_bbs.summary = summary new_bbs.owner = user new_bbs.user_id = user.user_id() new_bbs.bg_color="ffffff" new_bbs.font_color="333333" new_bbs.background_image="" new_bbs.bottom_image="" new_bbs.button_color="999999" new_bbs.button_active_color="777777" new_bbs.bbs_mode=int(self.request.get('mode')) new_bbs.my_homepage="" new_bbs.del_flag=0 new_bbs.enable_continue_draw=0 new_bbs.enable_moper=0 new_bbs.enable_full_flat=1 new_bbs.short=short new_bbs.delete_when_upload_success=1 new_bbs.applause_n=0 new_bbs.illust_n=0 new_bbs.comment_n=0 new_bbs.page_illust_n=5 new_bbs.page_comment_n=10 new_bbs.disable_applause=0 new_bbs.default_order=0 new_bbs.enable_illust_reply=1 new_bbs.enable_illust_reply_continue=0 new_bbs.disable_normal_reply=0 new_bbs.illust_reply_width=400 new_bbs.illust_reply_height=200 new_bbs.side_color="ffffff" new_bbs.side_font_color="333333" new_bbs.side_background_image="" new_bbs.comment_rule_enable=0 new_bbs.comment_rule="" new_bbs.default_canvas_size=0 new_bbs.default_canvas_width=0 new_bbs.default_canvas_height=0 new_bbs.disable_counter=0 new_bbs.disable_draw_time=0 new_bbs.disable_portal_menu=0 new_bbs.in_frame_mode=0; new_bbs.spoit_mode=0; new_bbs.disable_news=0; new_bbs.twitter_id="" new_bbs.twitter_enable=0 new_bbs.twitter_bg_color="ffffff" new_bbs.twitter_font_color="333333" new_bbs.twitter_shell_color="ffffff" new_bbs.twitter_height=300 new_bbs.design_template_no=1 new_bbs.content_bg_color="ffffff" new_bbs.content_font_color="333333" new_bbs.content_width=800 new_bbs.enable_full_comment=1 new_bbs.freearea="" new_bbs.amazon="" new_bbs.freearea_title="" new_bbs.amazon_title="" new_bbs.create_date=datetime.datetime.today() if(memcache.get(BbsConst.OBJECT_NEW_BBS_CREATING_HEADER+short)): Alert.alert_msg_with_write(self,"二重投稿を検知しました。戻ってリロードして下さい。") return memcache.set(BbsConst.OBJECT_NEW_BBS_CREATING_HEADER+short,"creating",BbsConst.NEW_BBS_CACHE_TIME) counter=Counter() counter.init_cnt() counter.put() new_bbs.counter=counter.key() SyncPut.put_sync(new_bbs) self.redirect(str(self.request.get('redirect')))