Exemplo n.º 1
0
    def render_comment_list(req, all_threads_cached, host_url, bbs,
                            show_comment_form, logined, is_admin, user_name,
                            user):
        edit_flag = False
        show_ip = False

        bbs_key = bbs.key()

        #コメントとレスを先行して全て取得
        entry_key_list = []
        for thread in all_threads_cached:
            if not thread:
                continue
            for entry in thread.cached_entry_key:
                entry_key_list.append(entry)
        entry_hash = ApiObject.get_cached_object_hash(entry_key_list)
        res_hash = ShowEntry._get_entry_res(entry_hash)

        #コメントをレンダリング
        for thread in all_threads_cached:
            if not thread:
                continue
            entry_list = []
            for entry in thread.cached_entry_key:
                one_entry = entry_hash[entry]
                entry_list.append(one_entry)
            thread.cached_render_comment = ShowEntry._render_comment_core(
                req, host_url, bbs, thread, entry_list, edit_flag, bbs_key,
                logined, show_comment_form, is_admin, user_name, user,
                res_hash, show_ip)
Exemplo n.º 2
0
    def _get_entry_res(entry_list):
        res_id_list = []

        if (type(entry_list) == dict):
            for com in entry_list:
                for res in entry_list[com].res_list:
                    res_id_list.append(res)
        else:
            for com in entry_list:
                for res in com.res_list:
                    res_id_list.append(res)

        return ApiObject.get_cached_object_hash(res_id_list)
Exemplo n.º 3
0
	def _get_entry_core(bbs,display_n,key):
		#コメントを取得
		entry_query = db.Query(Entry,keys_only=True)
		entry_query.order("-date");
		entry_query.filter("del_flag =",BbsConst.ENTRY_EXIST)
		entry_query.filter('bbs_key =', bbs)
		entry_key_list=entry_query.fetch(display_n)
		entry_list=ApiObject.get_cached_object_list(entry_key_list)

		#コメントに紐付いたスレッドを取得
		thread_key_list=[]
		for entry in entry_list:
			thread_key=Entry.thread_key.get_value_for_datastore(entry)
			thread_key_list.append(thread_key)
		thread_list=ApiObject.get_cached_object_hash(thread_key_list)

		#コメントに紐付いたレスを取得
		res_key_list=[]
		res_to_entry={}
		for entry in entry_list:
			entry_key=entry.key()
			res_n=len(entry.res_list)
			for i in range(0,display_n):
				no=res_n-1-i
				if(no>=0):
					res_key=entry.res_list[no]
					res_to_entry[res_key]=entry
					res_key_list.append(res_key)
		res_list=ApiObject.get_cached_object_list(res_key_list)

		#EntryとResでソートをかける
		sort_list=[]
		for entry in entry_list:
			if(entry.create_date):
				obj=(entry,entry.create_date,entry.editor)
				sort_list.append(obj)
		for res in res_list:
			if(res.date):
				obj=(res_to_entry[res.key()],res.date,res.editor)
				sort_list.append(obj)
		sort_list=sorted(sort_list, key=lambda temp: temp[1], reverse=True)
		sort_list=sort_list[:display_n]

		#出力する
		entry_array=[]
		for tp in sort_list:
			#ソートした値を取得
			entry=tp[0];
			editor=tp[2];

			#コメントのURLを計算するためにスレッドを取得
			try:
				thread_key=Entry.thread_key.get_value_for_datastore(entry)
			except:
				continue
			thread=thread_list[thread_key]
			if(not thread):
				continue
			thread_title=thread.title

			#URLに使用するキーを決定
			if(thread.short):
				thread_short=thread.short
			else:
				thread_short=thread_key

			#表示
			mee={'short': str(bbs.short),
					'bbs_key' : str(bbs.key()),
					'thread_key':thread_short,
					'entry_key': str(entry.key()),
					'thread_title':thread_title,
					'editor':editor,
					'date':entry.date}
			entry_array.append(mee)
		
		memcache.add(key, entry_array, BbsConst.SIDEBAR_RECENT_ENTRY_CACHE_TIME)
		return entry_array