Exemple #1
0
def reply_list(request):
    """
    自分に来た質問一覧を表示する
    """

    r = Reply()

    """
    # ランダムに質問取ってくる
    #下書きにチェックがはいっていないもののみ最新のものから順に表示
    question_tmp = Question.objects.filter(~Q(questioner=request.user))#.order_by('-date')[:]
    question = list(filter(lambda x: x.draft==False, question_tmp))
    question = random.choice(question) #ランダムに質問を取ってくる
    """

    # 06/09 返信リストの中から自分あて、かつ返信済みでない質問を取ってくる
    # 返信期限がまだ来てないもの、かつ返信期限が早いものから順に表示
    # replylist = ReplyList.objects.filter(answerer=request.user, has_replied=False,time_limit_date__gte=datetime.datetime.now(pytz.utc)).order_by('time_limit_date')[:]
    # questions = [r.question for r in replylist]

    # return render_to_response('question/reply_list.html',
    #                            {'questions':questions,},
    #                           context_instance=RequestContext(request))

    # 自分宛の質問のうち、自分の回答待ちになっている質問を取ってくる
    reply_list = ReplyList.objects.filter(answerer=request.user, has_replied=False)

    # 自分宛の質問を時系列に並べる
    reply_list = sorted(reply_list, reverse=True, key=lambda x: x.question.date)

    # 各質問の状態を調べる
    q_manager = QAManager(request.user)
    qa_list = q_manager.reply_state(reply_list=reply_list)

    # プロフィール
    for qa in qa_list:
        if isinstance(qa[0], Question):
            profile = UserProfile.objects.get(user=qa[0].questioner)
        elif isinstance(qa[0], ReplyList):
            profile = UserProfile.objects.get(user=qa[0].question.questioner)
        qa.append(profile)

    histories = None
    return render_to_response('question/top_r.html',
                              {'histories': histories, 'qa_list': qa_list, 'last_login': request.user.last_login},
                              context_instance=RequestContext(request))
Exemple #2
0
def reply_list(request):
    """
    自分に来た質問一覧を表示する
    """

    # 自分宛の質問のうち、自分の回答待ちになっている質問を取ってきて時系列に並べる
    reply_list = ReplyList.objects.filter(answerer=request.user, has_replied=False)
    reply_list = QAManager.sort_qa(qa_list=reply_list, reverse=True)

    if reply_list is not None:
        q_manager = QAManager(request.user)
        qa_list = q_manager.reply_state(reply_list=reply_list)
    else:
        qa_list = None

    return render_to_response('question/top_r.html',
                              {'qa_list': qa_list, 'last_login': request.user.last_login},
                              context_instance=RequestContext(request))
Exemple #3
0
def top_default(request, msg=None):
    """
    トップページ
    """

    # 自分の質問
    questions = Question.objects.filter(questioner=request.user)
    # 自分宛の質問リスト
    reply_lists = ReplyList.objects.filter(answerer=request.user)

    if request.method == 'POST':
        form = KeywordSearchForm(request.POST)

        """
        以下の質問をキーワード検索で取ってくる
        * 自分がした質問のタイトル・内容・タグいずれかがキーワードと部分一致
        * 相手から自分へ来た質問のタイトル・内容・タグいずれかがキーワードと部分一致
        * 自分の回答内容がキーワードと部分一致
        * 自分の投稿に対する相手の回答内容がキーワードと部分一致
        """
        if form.is_valid():
            keyword = form.clean()['keyword']
            questions, reply_lists = QAManager.search_keyword(user=request.user, keyword=keyword,
                                                              question=True, reply=True, tag=True)
            result = len(questions) + len(reply_lists)
            msg = '「'+keyword+'」の検索結果: '+str(result)+'件'

    # 自分の質問と自分宛ての質問の状態を調べる
    qa_manager = QAManager(request.user)
    questions = qa_manager.question_state(questions)
    reply_lists = qa_manager.reply_state(reply_lists)

    # 自分と自分宛の質問を結合して時系列に並べる
    qa_list = list()
    qa_list.extend(questions)
    qa_list.extend(reply_lists)
    qa_list = QAManager.sort_qa(qa_list=qa_list, reverse=True)

    return render_to_response('question/top_all.html',
                              {'qa_list': qa_list,
                               'last_login': request.user.last_login, 'msg': msg},
                              context_instance=RequestContext(request))
Exemple #4
0
def top_default(request, msg=None):
    """
    トップページ
    """
    # added
    # form = None
    # if request.method == 'GET':
    form = KeywordSearchForm()
    # 自分の質問を取ってくる
    questions = Question.objects.filter(questioner=request.user)
    # 自分宛の質問リストを取ってくる
    reply_lists = ReplyList.objects.filter(answerer=request.user)

    if request.method == 'POST':
        form = KeywordSearchForm(request.POST)

        """
       以下の質問をキーワード検索で取ってくる
       * 自分がした質問のタイトル・内容・タグいずれかがキーワードと部分一致
       * 相手から自分へ来た質問のタイトル・内容・タグいずれかがキーワードと部分一致
       * 自分の回答内容がキーワードと部分一致
       * 自分の投稿に対する相手の回答内容がキーワードと部分一致
       """
        # 自分宛の質問リストを取ってくる(パス含む)
        reply_lists = ReplyList.objects.filter(answerer=request.user)
        if form.is_valid():
            # すべての質問の中からキーワードに合致する質問のみ取り出す
            questions = list(Question.objects.filter(Q(title__contains=form.clean()['keyword']) |
                                                     Q(text__contains=form.clean()['keyword'])))

            # 回答内容にキーワードが含まれるもののうち自分が答えた質問のみ取り出す
            replies = list(Reply.objects.filter(Q(text__contains=form.clean()['keyword'])))

            # キーワードに合致するすべての質問のうち、自分が投稿した質問と、自分に来た質問を取り出す
            q_list_tmp = []
            r_list_tmp = []
            for ql in questions:
                if ql.questioner == request.user:
                    q_list_tmp.append(ql)
                rl = [rl for rl in reply_lists if ql.id == rl.question.id]
                r_list_tmp.extend(rl)

            # 自分の返信内容とキーワードが合致するものを取り出す
            for r in replies:
                if r.answerer == request.user:
                    rl = [rl for rl in reply_lists if r.question.id == rl.question.id]
                    r_list_tmp.extend(rl)
                elif r.question.questioner == request.user:
                    reply_lists = ReplyList.objects.filter(question=r.question)
                    rl = [rl for rl in reply_lists if r.question.id == rl.question.id]
                    r_list_tmp.extend(rl)

            reply_lists = r_list_tmp

            # キーワードに合致するすべてのタグを取り出す
            tags = list(Tag.objects.filter(Q(name__contains=form.clean()['keyword'])))  # キーワードが含まれるタグ(複数)

            # 自分が投稿した質問のタグと一致するもののみ取り出す
            for tag in tags:
                q_tags = QuestionTag.objects.filter(tag=tag)  # タグ名が合致する質問タグ
                q = [q_tag.question for q_tag in q_tags if q_tag.question.questioner == request.user]
                q_list_tmp.extend(q)
                q_list_tmp = list(set(q_list_tmp))
            questions = q_list_tmp

            # 自分が答えた質問のタグと一致するもののみ取り出す
            replies = list(Reply.objects.filter(answerer=request.user))
            for r in replies:
                for tag in tags:
                    q_tags = QuestionTag.objects.filter(tag=tag)  # タグ名が合致する質問タグ
                    q = [q_tag.question for q_tag in q_tags if
                         r.question.id == q_tag.question.id and r.answerer == request.user]
                    q_list_tmp.extend(q)
                    q_list_tmp = list(set(q_list_tmp))

            a = []
            b = []
            r_list_tmp = ReplyList.objects.filter(answerer=request.user)
            for tag in tags:
                q_tags = QuestionTag.objects.filter(tag=tag)  # タグ名が合致する質問タグ
                for rl in r_list_tmp:  # 自分に来た質問
                    for q_tag in q_tags:
                        if rl.question.id == q_tag.question.id:
                            a.append(rl)
                            b = list(set(a))
                            reply_lists.extend(b)

            reply_lists = list(set(reply_lists))

    # 自分の質問と自分宛ての質問の状態を調べる
    qa_manager = QAManager(request.user)
    questions = qa_manager.question_state(questions)
    reply_lists = qa_manager.reply_state(reply_lists)

    # 自分と自分宛の質問を結合して時系列に並べる
    qa_list = list()
    qa_list.extend(questions)
    qa_list.extend(reply_lists)
    qa_list = sorted(qa_list, reverse=True,
                     key=lambda x: x[0].date if isinstance(x[0], Question) else x[0].question.date)

    # プロフィール
    for qa in qa_list:
        if isinstance(qa[0], Question):
            profile = UserProfile.objects.get(user=qa[0].questioner)
        elif isinstance(qa[0], ReplyList):
            profile = UserProfile.objects.get(user=qa[0].question.questioner)
        qa.append(profile)
    histories = None
    return render_to_response('question/top_all.html',
                              {'histories': histories, 'qa_list': qa_list,
                               'last_login': request.user.last_login, 'msg': msg},
                              context_instance=RequestContext(request))