def post(self): bbs = None try: bbs = db.get(self.request.get("bbs_key")) except: bbs = None if bbs == None: self.response.out.write(Alert.alert_msg("削除対象が見つかりません。", self.request.host)) return user = users.get_current_user() if not user: self.response.out.write(Alert.alert_msg("ログインする必要があります。", self.request.host)) return is_admin = OwnerCheck.is_admin(user) if OwnerCheck.check(bbs, user) and (not is_admin): self.response.out.write(Alert.alert_msg("削除する権限がありません。", self.request.host)) return bbs.del_flag = 1 bbs.put() ApiFeed.invalidate_cache() self.redirect(str("./mypage?tab=bbs"))
def del_message_list(self,user): if(self.request.get("user_id")!=user.user_id()): self.response.out.write(Alert.alert_msg("認証に失敗しました。",self.request.host)); return False bookmark=ApiObject.get_bookmark_of_user_id_for_write(user.user_id()) if(bookmark==None): self.response.out.write(Alert.alert_msg("ユーザデータが見つかりません。",self.request.host)); return False tweet_list=self.request.get_all("tweet_list") if(not tweet_list or len(tweet_list)==0): self.response.out.write(Alert.alert_msg("削除するツイートが選択されていません。",self.request.host)); return False for tweet in tweet_list: self.del_from_bookmark(bookmark,tweet) try: data=db.get(tweet) except: data=None if(data): if(data.from_user_id==user.user_id()): data.delete() bookmark.put() return True
def check_id_available(main,app_id): if(app_id=="" or MappingId.key_format_check(app_id)): main.response.out.write(Alert.alert_msg("アプリIDは半角英数である必要があります。",main.request.host)) return False query=AppCode.all().filter("app_id =",app_id) if(query.count()==0): return True main.response.out.write(Alert.alert_msg("このアプリIDは既に使われています。",main.request.host)) return False
def set_css(main,css,bbs): if(css): if(css!=""): app=AppPortal.get_app(css) if(app==None): main.response.out.write(Alert.alert_msg("CSSデザインが見つかりません。",main.request.host)) return False if(app.mode!=BbsConst.APP_MODE_CSS): main.response.out.write(Alert.alert_msg("CSSデザインではありません。",main.request.host)) return False bbs.css=app return True
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): try: bbs = db.get(self.request.get("bbs_key")) except: bbs=None try: thread = db.get(self.request.get("thread_key")) except: thread=None if(not bbs or not thread): self.response.out.write(Alert.alert_msg("削除対象が見つかりません。",self.request.host)) return is_english=CssDesign.is_english(self) del_ok=0 if(self.request.get("del_key")): if(thread.delete_key): if(thread.delete_key==self.request.get("del_key")): del_ok=1 else: msg="削除キーが一致しません。" if(is_english): msg="invalid key" self.response.out.write(Alert.alert_msg(msg,self.request.host)) return; user = users.get_current_user() bbs_owner = not OwnerCheck.check(bbs,user) thread_owner=False if(user and user.user_id()==thread.user_id): thread_owner=True if(del_ok==0): if(not bbs_owner and not thread_owner and not OwnerCheck.is_admin(user)): self.response.out.write(Alert.alert_msg("削除権限がありません。",self.request.host)) return DelThread.delete_thread_core(thread) bbs.cached_thumbnail_key=None bbs.put() ApiFeed.invalidate_cache() url=MappingId.get_usr_url("./",bbs) self.redirect(str(url))
def post(self): SetUtf8.set() page=None if(self.request.get("page")): page=self.request.get("page") user = users.get_current_user() if(not user): if(page=="update"): dic={"status":"failed","message":"アプリを登録するにはログインする必要があります。"} ApiObject.write_json_core(self,dic) return else: self.response.out.write(Alert.alert_msg("アプリを登録するにはログインする必要があります。",self.request.host)) return if(page=="update"): dic=DevPortal.update_app(self,user) if(dic==None): return ApiObject.write_json_core(self,dic) return if(page=="submit"): if(not DevPortal.add_new_app(self,user)): return DevPortal.ret(self,"top")
def add_support_forum(main,app): if(not app.support_forum and app.is_public): thread=MesThread() bbs_key=MappingId.mapping(BbsConst.APP_SUPPORT_BBS_ID) if(bbs_key==""): #return False main.response.out.write(Alert.alert_msg("サポートフォーラムBBS[ID:"+BbsConst.APP_SUPPORT_BBS_ID+"]が見つかりません。",main.request.host)) return True bbs=db.get(bbs_key) thread.bbs_key=bbs thread.title=app.app_name thread.author=app.author thread.summary=app.app_name+"のサポートフォーラムです。" thread.user_id=app.user_id thread.illust_mode=BbsConst.ILLUSTMODE_NONE thread.create_date=datetime.datetime.today() thread.comment_cnt=0 thread.date=datetime.datetime.today() thread.put() app.support_forum=thread app.put() #if(not app.support_forum.score): # app.support_forum.score = None # app.support_forum.put() return False
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 add_new_message(self,user): #メッセージ作成 data=StackFeedData() data.feed_mode="message" data.from_user_id=user.user_id() if(self.request.get("to_user_id")): data.to_user_id=self.request.get("to_user_id") else: data.to_user_id=None data.user_key=None data.bbs_key=None data.thread_key=None data.message=self.request.get("message") if(data.message==""): self.response.out.write(Alert.alert_msg("書き込みメッセージが存在しません。",self.request.host)); return False data.create_date=datetime.datetime.today() #二重投稿防止 message=memcache.get("StackFeedTweet") if(message==self.request.get("message")): self.response.out.write(Alert.alert_msg("このメッセージは既に投稿されています。",self.request.host)); return False memcache.set("StackFeedTweet",self.request.get("message"),5) #保存 data.put() #トップページ用ログ格納 recent=StackFeedDataRecent.get_or_insert(data.from_user_id) recent.message=data.message recent.from_user_id=data.from_user_id recent.to_user_id=data.to_user_id recent.put() #自分と相手にフィード StackFeed._append_one(data,user.user_id()) if(data.to_user_id): StackFeed._append_one(data,data.to_user_id) #フォロワーにフィード StackFeed.feed_new_message(user,data) return True
def delete_app(req): app_key=None if(req.request.get("app_key")): app_key=req.request.get("app_key") app=db.get(app_key) user = users.get_current_user() if(app and user and app.user_id==user.user_id()): app.delete() else: req.response.out.write(Alert.alert_msg("アプリが見つからないか削除する権限がありません。",req.request.host)) return True return False
def get(self): SetUtf8.set() user = users.get_current_user() is_admin=0 if(user): if(OwnerCheck.is_admin(user)): is_admin=1 if(not is_admin): self.response.out.write(Alert.alert_msg("管理者権限が必要です。",self.request.host)); return checkcode=SpamCheck.get_check_code() query=Entry.all() thread=None try: thread=db.get(checkcode) except: thread=None if(thread): query.filter("thread_key =",thread) entrys=query.fetch(limit=1000) ret=0 aborted="" for entry in entrys: if(SpamCheck.check_with_thread(entry,checkcode)): entry.delete() ret=ret+1 if(ret>=250): aborted="ABORTED" break; RecentCommentCache.invalidate(None); self.response.out.write(Alert.alert_msg("<H2>SPAM DELETE RESULT</H2>"+aborted+"<H2>TOTAL</H2>DELETE CNT:"+str(ret),self.request.host))
def del_message_all(self,user): if(self.request.get("user_id")!=user.user_id()): self.response.out.write(Alert.alert_msg("認証に失敗しました。",self.request.host)); return False bookmark=ApiObject.get_bookmark_of_user_id_for_write(user.user_id()) if(bookmark==None): self.response.out.write(Alert.alert_msg("ユーザデータが見つかりません。",self.request.host)); return False tweeet_list=StackFeedData.all().filter("from_user_id =",user.user_id()).filter("feed_mode =","message").fetch(limit=1000) delete_limit=100 del_cnt=0 for tweet in tweeet_list: if(tweet.from_user_id==user.user_id()): self.del_from_bookmark(bookmark,str(tweet.key())) tweet.delete() del_cnt=del_cnt+1 if(del_cnt>=delete_limit): break if(del_cnt>=delete_limit):#len(bookmark.my_timeline)>=1): self.response.out.write(Alert.alert_msg(str(del_cnt)+"件のツイートを削除しましたが、ツイートを削除しきることができませんでした。リロードして下さい。",self.request.host)); return False if(del_cnt==0): self.response.out.write(Alert.alert_msg("削除するツイートが見つかりませんでした。",self.request.host)); return False #bookmark.stack_feed_list=[] #bookmark.my_timeline=[] bookmark.put() self.response.out.write(Alert.alert_msg(str(del_cnt)+"件のツイートを削除しました。",self.request.host)); return False
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 get(self): host_url="http://"+MappingId.mapping_host(self.request.host)+"/" bbs_key=self.request.get("bbs_key") thread_key=self.request.get("thread_key") try: bbs = db.get(self.request.get("bbs_key")) thread = db.get(self.request.get("thread_key")) except: bbs = None thread = None if(bbs==None or thread==None): self.response.out.write(Alert.alert_msg("スレッドが見つかりません。",self.request.host)) return image=thread.image_key#db.get(thread.image); width=400 height=400 if(image.width): width=image.width if(image.height): height=image.height if(self.request.get("width")): width=self.request.get("width") if(self.request.get("height")): height=self.request.get("height") if(CssDesign.is_iphone(self)==1): if(width>=300): height=300*height/width width=300 template_values = { 'host': host_url, 'bbs': bbs, 'bbs_key': bbs_key, 'thread': thread, 'thread_key': thread_key, 'width': width, 'height': height } path = '/html/moper/moper_embedded.htm' self.response.out.write(template_select.render(path, template_values))
def delete_image(req): app_key=None if(req.request.get("app_key")): app_key=req.request.get("app_key") app=db.get(app_key) user = users.get_current_user() if(app and user and app.user_id==user.user_id()): image_id=req.request.get("image_id") index_no=app.image_id_list.index(image_id) app.image_id_list.pop(index_no) app.image_blob_list.pop(index_no) app.image_type_list.pop(index_no) app.put() if(req.request.get("bbs_key")): req.redirect(str("./dev?page=info&app_key="+str(app.key())+"&bbs_key="+req.request.get("bbs_key"))) else: req.redirect(str("./dev?page=info&app_key="+str(app.key()))) else: req.response.out.write(Alert.alert_msg("アプリが見つからないか削除する権限がありません。",req.request.host))
def add_new_app(main,user): app=AppCode() app.user_id=user.user_id() author="none" bookmark=ApiObject.get_bookmark_of_user_id(app.user_id) if(bookmark and bookmark.name): author=bookmark.name app.author=author app.js_code="" app.css_code="" app.app_name=main.request.get("app_name") app.app_id=main.request.get("app_id") app.mode=int(main.request.get("mode")) app.plugin_args="" app.app_guide="" app.is_public=0 app.create_date=datetime.datetime.today() if(not DevPortal.check_id_available(main,app.app_id)): return if(app.app_name==""): main.response.out.write(Alert.alert_msg("アプリ名は必須です。",main.request.host)) return False app.put() return True
def update_app(main,user): app_key=main.request.get("app_key") app=None try: app=db.get(app_key) except: app=None no_permit=0 if(not(app) or not(app.user_id==user.user_id())): no_permit=1 if(main.request.get("code")): if(no_permit): dic={"status":"failed","message":"アプリを保存する権限がありません"} return dic if(app.mode==BbsConst.APP_MODE_CSS): app.css_code=main.request.get("code") else: app.js_code=main.request.get("code") app.put() dic={"status":"success","message":""} return dic if(no_permit): main.response.out.write(Alert.alert_msg("アプリを保存する権限がありません。",main.request.host)) return if(app.app_id!=main.request.get("app_id")): if(not DevPortal.check_id_available(main,main.request.get("app_id"))): return app.author=main.request.get("author") app.app_name=main.request.get("app_name") app.app_id=main.request.get("app_id") app.app_guide=main.request.get("app_guide") app.is_public=int(main.request.get("is_public")) app.mode=int(main.request.get("mode")) app.ranking_order=int(main.request.get("ranking_order")) app.ranking_key=main.request.get("ranking_key") app.plugin_args=main.request.get("plugin_args") if(app.is_public): if(not app.public_date): app.public_date=datetime.datetime.today() if(not app.bookmark_count): app.bookmark_count=0 if(main.request.get("icon")): app.icon=db.Blob(main.request.get("icon")) img = main.request.body_file.vars['icon'] app.icon_content_type=img.headers['content-type'] if(main.request.get("image")): if(main.request.get("image_id")==""): main.response.out.write(Alert.alert_msg("画像リソースにはIDが必要です。",main.request.host)) return app.image_blob_list.append(db.Blob(main.request.get("image"))) img = main.request.body_file.vars['image'] app.image_type_list.append(img.headers['content-type']) app.image_id_list.append(main.request.get("image_id")) try: app.put() except: main.response.out.write(Alert.alert_msg("画像の容量が大きすぎます。",main.request.host)) return if(main.request.get("redirect")): main.redirect(str(main.request.get("redirect"))) else: if(main.request.get("image")): main.redirect(str("./dev?page=info&app_key="+str(app.key()))) else: main.redirect(str("./dev")) return None
def get(self): user = users.get_current_user() if(not user): self.response.out.write(Alert.alert_msg("ログインが必要です。",self.request.host)); return