def create_answer_id(request, page):
    """
    Create an incremented Answer ID for a new AnswerPage and attach it.

    Also create a sister-language page to keep languages in sync.
    """
    def create_sister_page(new_page, answer_base):
        sister_map = {
            'es': {
                'language': 'en',
                'parent': Page.objects.get(slug='ask-cfpb').specific,
                'title_prefix': 'English draft of',
            },
            'en': {
                'language': 'es',
                'parent': Page.objects.get(slug='obtener-respuestas').specific,
                'title_prefix': 'Spanish draft of',
            }
        }
        sister_values = sister_map[new_page.language]
        sister_page = AnswerPage(
            live=False,
            language=sister_values['language'],
            title="{} {}-{}-{}".format(
                sister_values['title_prefix'],
                new_page.title,
                sister_values['language'],
                answer_base.pk),
            answer_base=answer_base,
        )
        sister_values['parent'].add_child(instance=sister_page)
        return sister_page

    if isinstance(page, AnswerPage) and page.answer_base is None:
        new_answer_base = Answer(
            last_user=request.user,
            question=page.title)
        new_answer_base.save()
        new_id = new_answer_base.pk
        page.answer_base = new_answer_base
        page.language = page.get_parent().language
        sister_page = create_sister_page(page, new_answer_base)
        sister_page.save()
        sister_page.save_revision(user=request.user)
        page.title = "{}-{}-{}".format(
            page.title, page.language, new_id)
        page.slug = "{}-{}-{}".format(
            page.slug, page.language, new_id)
        page.save()
        page.save_revision(user=request.user)
示例#2
0
def create_answer_id(request, page):
    """
    Create an incremented Answer ID for a new AnswerPage and attach it.

    Also create a sister-language page to keep languages in sync.
    """
    def create_sister_page(new_page, answer_base):
        sister_map = {
            'es': {
                'language': 'en',
                'parent': Page.objects.get(slug='ask-cfpb').specific,
                'title_prefix': 'English draft of',
            },
            'en': {
                'language': 'es',
                'parent': Page.objects.get(slug='obtener-respuestas').specific,
                'title_prefix': 'Spanish draft of',
            }
        }
        sister_values = sister_map[new_page.language]
        sister_page = AnswerPage(
            live=False,
            language=sister_values['language'],
            title="{} {}-{}-{}".format(
                sister_values['title_prefix'],
                new_page.title,
                sister_values['language'],
                answer_base.pk),
            answer_base=answer_base,
        )
        sister_values['parent'].add_child(instance=sister_page)
        return sister_page

    if isinstance(page, AnswerPage) and page.answer_base is None:
        new_answer_base = Answer(
            last_user=request.user,
            question=page.title)
        new_answer_base.save()
        new_id = new_answer_base.pk
        page.answer_base = new_answer_base
        page.language = page.get_parent().language
        sister_page = create_sister_page(page, new_answer_base)
        sister_page.save()
        sister_page.save_revision(user=request.user)
        page.title = "{}-{}-{}".format(
            page.title, page.language, new_id)
        page.slug = "{}-{}-{}".format(
            page.slug, page.language, new_id)
        page.save()
        page.save_revision(user=request.user)
示例#3
0
 def tag_search(self, request, **kwargs):
     from ask_cfpb.models import Answer
     tag_dict = Answer.valid_tags(language=self.language)
     tag = kwargs.get('tag').replace('_', ' ')
     if not tag or tag not in tag_dict['valid_tags']:
         raise Http404
     if self.language == 'es':
         self.answers = [
             (SPANISH_ANSWER_SLUG_BASE.format(a.id),
              a.question_es,
              Truncator(a.answer_es).words(40, truncate=' ...'))
             for a in tag_dict['tag_map'][tag]
             if a.answer_pages.filter(language='es', live=True)
         ]
     else:
         self.answers = [
             (ENGLISH_ANSWER_SLUG_BASE.format(a.id),
              a.question,
              Truncator(a.answer).words(40, truncate=' ...'))
             for a in tag_dict['tag_map'][tag]
             if a.answer_pages.filter(language='en', live=True)
         ]
     paginator = Paginator(self.answers, 20)
     page_number = validate_page_number(request, paginator)
     page = paginator.page(page_number)
     context = self.get_context(request)
     context['current_page'] = page_number
     context['results'] = page
     context['results_count'] = len(self.answers)
     context['tag'] = tag
     context['paginator'] = paginator
     return TemplateResponse(
         request,
         self.get_template(request),
         context)
示例#4
0
 def tag_search(self, request, **kwargs):
     from ask_cfpb.models import Answer
     tag_dict = Answer.valid_tags(language=self.language)
     tag = kwargs.get('tag').replace('_', ' ')
     if not tag or tag not in tag_dict['valid_tags']:
         raise Http404
     if self.language == 'es':
         self.answers = [
             (SPANISH_ANSWER_SLUG_BASE.format(a.id),
              a.question_es,
              Truncator(a.answer_es).words(40, truncate=' ...'))
             for a in tag_dict['tag_map'][tag]
         ]
     else:
         self.answers = [
             (ENGLISH_ANSWER_SLUG_BASE.format(a.id),
              a.question,
              Truncator(a.answer).words(40, truncate=' ...'))
             for a in tag_dict['tag_map'][tag]
         ]
     paginator = Paginator(self.answers, 20)
     page_number = validate_page_number(request, paginator)
     page = paginator.page(page_number)
     context = self.get_context(request)
     context['current_page'] = page_number
     context['results'] = page
     context['results_count'] = len(self.answers)
     context['tag'] = tag
     context['paginator'] = paginator
     return TemplateResponse(
         request,
         self.get_template(request),
         context)