def tos_confirm(request): user = None if request.user.is_authenticated: user = request.user elif 'tos_user' in request.session: user = User.objects.get(pk=request.session['tos_user']) if user is None: return redirect('home') agreement = Agreement.objects.get_or_create(user=user)[0] if agreement.is_current(): return redirect_next(request.GET.get('next'), 'home') if request.method == 'POST': form = TOSForm(request.POST) if form.is_valid(): agreement.make_current(request) return redirect_next(form.cleaned_data['next'], 'home') else: form = TOSForm(initial={'next': request.GET.get('next')}) return render( request, 'legal/confirm.html', { 'form': form, } )
def tos_confirm(request): user = None if request.user.is_authenticated: user = request.user elif 'tos_user' in request.session: user = User.objects.get(pk=request.session['tos_user']) if user is None: return redirect('home') agreement = Agreement.objects.get_or_create(user=user)[0] if agreement.is_current(): return redirect_next(request.GET.get('next'), 'home') if request.method == 'POST': form = TOSForm(request.POST) if form.is_valid(): agreement.make_current(request) return redirect_next(form.cleaned_data['next'], 'home') else: form = TOSForm(initial={'next': request.GET.get('next')}) return render(request, 'legal/confirm.html', { 'form': form, })
def edit_context(request, pk): unit = get_object_or_404(Unit, pk=pk) if not unit.is_source and not unit.translation.component.is_glossary: raise Http404("Non source unit!") do_add = "addflag" in request.POST if do_add or "removeflag" in request.POST: if not request.user.has_perm("unit.flag", unit.translation): raise PermissionDenied() flag = request.POST.get("addflag", request.POST.get("removeflag")) flags = Flags(unit.extra_flags) if do_add: flags.merge(flag) else: flags.remove(flag) new_flags = flags.format() if new_flags != unit.extra_flags: unit.extra_flags = new_flags unit.save(same_content=True, update_fields=["extra_flags"]) else: if not request.user.has_perm("source.edit", unit.translation): raise PermissionDenied() form = ContextForm(request.POST, instance=unit, user=request.user) if form.is_valid(): form.save() else: messages.error(request, _("Failed to change additional string info!")) show_form_errors(request, form) return redirect_next(request.POST.get("next"), unit.get_absolute_url())
def agreement_confirm(request, project, component): component = get_component(request, project, component) has_agreed = ContributorAgreement.objects.has_agreed( request.user, component ) if request.method == 'POST': form = ContributorAgreementForm(request.POST) if form.is_valid() and not has_agreed: ContributorAgreement.objects.create( user=request.user, component=component ) return redirect_next( request.GET.get('next'), component.get_absolute_url(), ) else: form = ContributorAgreementForm( initial={ 'next': request.GET.get('next'), 'confirm': has_agreed, } ) return render( request, 'contributor-agreement.html', { 'form': form, 'object': component, 'has_agreed': has_agreed, } )
def comment(request, pk): """Add new comment.""" unit = get_object_or_404(Unit, pk=pk) request.user.check_access(unit.translation.component.project) if not request.user.has_perm('comment.add', unit.translation): raise PermissionDenied() form = CommentForm(request.POST) if form.is_valid(): if form.cleaned_data['scope'] == 'global': lang = None else: lang = unit.translation.language Comment.objects.add( unit, request.user, lang, form.cleaned_data['comment'] ) messages.success(request, _('Posted new comment')) else: messages.error(request, _('Failed to add comment!')) return redirect_next(request.POST.get('next'), unit)
def comment(request, pk): """Add new comment.""" unit = get_object_or_404(Unit, pk=pk) request.user.check_access(unit.translation.component.project) if not request.user.has_perm('comment.add', unit.translation): raise PermissionDenied() form = CommentForm(request.POST) if form.is_valid(): if form.cleaned_data['scope'] == 'global': lang = None else: lang = unit.translation.language Comment.objects.add( unit, request.user, lang, form.cleaned_data['comment'] ) messages.success(request, _('Posted new comment')) else: messages.error(request, _('Failed to add comment!')) return redirect_next(request.POST.get('next'), unit)
def agreement_confirm(request, project, component): component = get_component(request, project, component) has_agreed = ContributorAgreement.objects.has_agreed( request.user, component) if request.method == 'POST': form = ContributorAgreementForm(request.POST) if form.is_valid() and not has_agreed: ContributorAgreement.objects.create(user=request.user, component=component) return redirect_next(request.GET.get('next'), component.get_absolute_url()) else: form = ContributorAgreementForm(initial={ 'next': request.GET.get('next'), 'confirm': has_agreed }) return render( request, 'contributor-agreement.html', { 'form': form, 'object': component, 'has_agreed': has_agreed }, )
def agreement_confirm(request, project, component): component = get_component(request, project, component) has_agreed = ContributorAgreement.objects.has_agreed( request.user, component) if request.method == "POST": form = ContributorAgreementForm(request.POST) if form.is_valid() and not has_agreed: ContributorAgreement.objects.create(user=request.user, component=component) return redirect_next(request.GET.get("next"), component.get_absolute_url()) else: form = ContributorAgreementForm(initial={ "next": request.GET.get("next"), "confirm": has_agreed }) return render( request, "contributor-agreement.html", { "form": form, "object": component, "has_agreed": has_agreed }, )
def edit_glossary(request, pk): term = get_object_or_404(Term, id=pk) if not term.check_perm(request.user, "glossary.edit"): raise PermissionDenied() if request.method == "POST": form = TermForm(term.glossary.project, data=request.POST, instance=term) if form.is_valid(): term.edit( request, form.cleaned_data["source"], form.cleaned_data["target"], form.cleaned_data["glossary"], ) return redirect_next( request.POST.get("next"), reverse( "show_glossary", kwargs={ "project": term.glossary.project.slug, "lang": term.language.code, }, ), ) else: form = TermForm(term.glossary.project, instance=term) last_changes = Change.objects.last_changes( request.user).filter(glossary_term=term)[:10] return render( request, "edit_glossary.html", { "title": dict_title(term.glossary, term.language), "project": term.glossary.project, "language": term.language, "form": form, "next": request.POST.get("next") or request.GET.get("next"), "last_changes": last_changes, "last_changes_url": urlencode(( ("project", term.glossary.project.slug), ("lang", term.language.code), ("action", Change.ACTION_DICTIONARY_NEW), ("action", Change.ACTION_DICTIONARY_EDIT), ("action", Change.ACTION_DICTIONARY_UPLOAD), )), }, )
def resolve_comment(request, pk): """Resolve comment.""" comment_obj = get_object_or_404(Comment, pk=pk) if not request.user.has_perm("comment.delete", comment_obj): raise PermissionDenied() fallback_url = comment_obj.unit.get_absolute_url() comment_obj.resolved = True comment_obj.save(update_fields=["resolved"]) messages.info(request, _("Translation comment has been resolved.")) return redirect_next(request.POST.get("next"), fallback_url)
def edit_check_flags(request, pk): """Change source string flags.""" source = get_object_or_404(Source, pk=pk) if not request.user.has_perm('source.edit', source.component): raise PermissionDenied() form = CheckFlagsForm(request.POST) if form.is_valid(): source.check_flags = form.cleaned_data['flags'] source.save() else: messages.error(request, _('Failed to change translation flags!')) return redirect_next(request.POST.get('next'), source.get_absolute_url())
def edit_context(request, pk): """Change source string context.""" source = get_object_or_404(Source, pk=pk) if not request.user.has_perm('source.edit', source.component): raise PermissionDenied() form = ContextForm(request.POST) if form.is_valid(): source.context = form.cleaned_data['context'] source.save() else: messages.error(request, _('Failed to change a context!')) return redirect_next(request.POST.get('next'), source.get_absolute_url())
def tos_confirm(request): user = None if request.user.is_authenticated: user = request.user elif "tos_user" in request.session: user = User.objects.get(pk=request.session["tos_user"]) if user is None: return redirect("home") agreement = Agreement.objects.get_or_create(user=user)[0] if agreement.is_current(): return redirect_next(request.GET.get("next"), "home") if request.method == "POST": form = TOSForm(request.POST) if form.is_valid(): agreement.make_current(request) return redirect_next(form.cleaned_data["next"], "home") else: form = TOSForm(initial={"next": request.GET.get("next")}) return render(request, "legal/confirm.html", {"form": form})
def edit_priority(request, pk): """Change source string priority.""" source = get_object_or_404(Source, pk=pk) if not can_edit_priority(request.user, source.subproject.project): raise PermissionDenied() form = PriorityForm(request.POST) if form.is_valid(): source.priority = form.cleaned_data['priority'] source.save() else: messages.error(request, _('Failed to change a priority!')) return redirect_next(request.POST.get('next'), source.get_absolute_url())
def delete_glossary(request, pk): term = get_object_or_404(Term, id=pk) if not term.check_perm(request.user, "glossary.delete"): raise PermissionDenied() term.delete() return redirect_next( request.POST.get("next"), reverse( "show_glossary", kwargs={"project": term.glossary.project.slug, "lang": term.language.code}, ), )
def edit_priority(request, pk): """Change source string priority.""" source = get_object_or_404(Source, pk=pk) if not request.user.has_perm('source.edit', source.component): raise PermissionDenied() form = PriorityForm(request.POST) if form.is_valid(): source.priority = form.cleaned_data['priority'] source.save() else: messages.error(request, _('Failed to change a priority!')) return redirect_next(request.POST.get('next'), source.get_absolute_url())
def edit_check_flags(request, pk): """Change source string check flags.""" source = get_object_or_404(Source, pk=pk) if not can_edit_flags(request.user, source.subproject.project): raise PermissionDenied() form = CheckFlagsForm(request.POST) if form.is_valid(): source.check_flags = form.cleaned_data['flags'] source.save() else: messages.error(request, _('Failed to change check flags!')) return redirect_next(request.POST.get('next'), source.get_absolute_url())
def delete_comment(request, pk): """Delete comment.""" comment_obj = get_object_or_404(Comment, pk=pk) project = comment_obj.unit.translation.component.project request.user.check_access(project) if not request.user.has_perm('comment.delete', comment_obj, project): raise PermissionDenied() fallback_url = comment_obj.unit.get_absolute_url() comment_obj.delete() messages.info(request, _('Translation comment has been deleted.')) return redirect_next(request.POST.get('next'), fallback_url)
def edit_context(request, pk): """Change source string context.""" source = get_object_or_404(Source, pk=pk) if not request.user.has_perm('source.edit', source.component): raise PermissionDenied() form = ContextForm(request.POST) if form.is_valid(): source.context = form.cleaned_data['context'] source.save() else: messages.error(request, _('Failed to change a context!')) show_form_errors(request, form) return redirect_next(request.POST.get('next'), source.get_absolute_url())
def delete_comment(request, pk): """Delete comment.""" comment_obj = get_object_or_404(Comment, pk=pk) if not request.user.has_perm("comment.delete", comment_obj): raise PermissionDenied() fallback_url = comment_obj.unit.get_absolute_url() if "spam" in request.POST: comment_obj.report_spam() comment_obj.delete() messages.info(request, _("Translation comment has been deleted.")) return redirect_next(request.POST.get("next"), fallback_url)
def edit_context(request, pk): unit = get_object_or_404(Unit, pk=pk) if not unit.is_source: raise Http404("Non source unit!") if not request.user.has_perm("source.edit", unit.translation.component): raise PermissionDenied() form = ContextForm(request.POST, instance=unit, user=request.user) if form.is_valid(): form.save() else: messages.error(request, _("Failed to change a context!")) show_form_errors(request, form) return redirect_next(request.POST.get("next"), unit.get_absolute_url())
def delete_comment(request, pk): """Delete comment.""" comment_obj = get_object_or_404(Comment, pk=pk) check_access(request, comment_obj.project) if not can_delete_comment(request.user, comment_obj.project): raise PermissionDenied() units = get_related_units(comment_obj) if units.exists(): fallback_url = units[0].get_absolute_url() else: fallback_url = comment_obj.project.get_absolute_url() comment_obj.delete() messages.info(request, _('Translation comment has been deleted.')) return redirect_next(request.POST.get('next'), fallback_url)
def delete_comment(request, pk): """Delete comment.""" comment_obj = get_object_or_404(Comment, pk=pk) check_access(request, comment_obj.project) if not can_delete_comment(request.user, comment_obj): raise PermissionDenied() units = get_related_units(comment_obj) if units.exists(): fallback_url = units[0].get_absolute_url() else: fallback_url = comment_obj.project.get_absolute_url() comment_obj.delete() messages.info(request, _('Translation comment has been deleted.')) return redirect_next(request.POST.get('next'), fallback_url)
def show_glossary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) if request.method == "POST" and request.user.has_perm("glossary.add", prj): form = TermForm(prj, request.POST) if form.is_valid(): Term.objects.create( request.user, language=lang, source=form.cleaned_data["source"], target=form.cleaned_data["target"], glossary=form.cleaned_data["glossary"], ) return redirect_next(request.POST.get("next"), request.get_full_path()) form = TermForm(prj,) uploadform = GlossaryUploadForm(prj) terms = Term.objects.for_project(prj).filter(language=lang).order() letterform = LetterForm(request.GET) searchform = OneTermForm(request.GET) if searchform.is_valid() and searchform.cleaned_data["term"] != "": terms = terms.filter(source__substring=searchform.cleaned_data["term"]) search = searchform.cleaned_data["term"] else: search = "" if letterform.is_valid() and letterform.cleaned_data["letter"] != "": terms = terms.filter(source__istartswith=letterform.cleaned_data["letter"]) letter = letterform.cleaned_data["letter"] else: letter = "" terms = get_paginator(request, terms) last_changes = ( Change.objects.last_changes(request.user) .filter(project=prj, language=lang) .exclude(glossary_term=None)[:10] )
def comment(request, pk): """Add new comment.""" scope = unit = get_object_or_404(Unit, pk=pk) request.user.check_access(unit.translation.component.project) if not request.user.has_perm("comment.add", unit.translation): raise PermissionDenied() form = CommentForm(request.POST) if form.is_valid(): if form.cleaned_data["scope"] == "global": scope = unit.source_info Comment.objects.add(scope, request.user, form.cleaned_data["comment"]) messages.success(request, _("Posted new comment")) else: messages.error(request, _("Failed to add comment!")) return redirect_next(request.POST.get("next"), unit)
def comment(request, pk): """Add new comment.""" scope = unit = get_object_or_404(Unit, pk=pk) component = unit.translation.component request.user.check_access(component.project) if not request.user.has_perm("comment.add", unit.translation): raise PermissionDenied() form = CommentForm(unit.translation, request.POST) if form.is_valid(): # Is this source or target comment? if form.cleaned_data["scope"] in ("global", "report"): scope = unit.source_info # Create comment object Comment.objects.add(scope, request, form.cleaned_data["comment"]) # Add review label/flag if form.cleaned_data["scope"] == "report": if component.has_template(): if scope.translated and not scope.readonly: scope.translate( request.user, scope.target, STATE_FUZZY, change_action=Change.ACTION_MARKED_EDIT, ) else: label = component.project.label_set.get_or_create( name=gettext_noop("Source needs review"), defaults={"color": "red"})[0] scope.labels.add(label) messages.success(request, _("Posted new comment")) else: messages.error(request, _("Failed to add comment!")) return redirect_next(request.POST.get("next"), unit)
def show_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) if request.method == 'POST' and can_add_dictionary(request.user, prj): form = WordForm(request.POST) if form.is_valid(): Dictionary.objects.create(request.user, project=prj, language=lang, source=form.cleaned_data['source'], target=form.cleaned_data['target']) return redirect_next(request.POST.get('next'), request.get_full_path()) else: form = WordForm() uploadform = DictUploadForm() words = Dictionary.objects.filter(project=prj, language=lang).order_by(Lower('source')) page, limit = get_page_limit(request, 25) letterform = LetterForm(request.GET) if letterform.is_valid() and letterform.cleaned_data['letter'] != '': words = words.filter( source__istartswith=letterform.cleaned_data['letter']) letter = letterform.cleaned_data['letter'] else: letter = '' paginator = Paginator(words, limit) try: words = paginator.page(page) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. words = paginator.page(paginator.num_pages) last_changes = Change.objects.last_changes(request.user).filter( dictionary__project=prj, dictionary__language=lang)[:10] return render( request, 'dictionary.html', { 'title': dict_title(prj, lang), 'project': prj, 'language': lang, 'page_obj': words, 'form': form, 'query_string': 'letter={}'.format(letter) if letter else '', 'uploadform': uploadform, 'letterform': letterform, 'letter': letter, 'limit': limit, 'page': page, 'last_changes': last_changes, 'last_changes_url': urlencode({ 'project': prj.slug, 'lang': lang.code, 'glossary': 1 }), })
def show_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) if request.method == 'POST' and request.user.has_perm('glossary.add', prj): form = WordForm(request.POST) if form.is_valid(): Dictionary.objects.create( request.user, project=prj, language=lang, source=form.cleaned_data['source'], target=form.cleaned_data['target'] ) return redirect_next( request.POST.get('next'), request.get_full_path() ) else: form = WordForm() uploadform = DictUploadForm() words = Dictionary.objects.filter( project=prj, language=lang ).order_by(Lower('source')) page, limit = get_page_limit(request, 25) letterform = LetterForm(request.GET) if letterform.is_valid() and letterform.cleaned_data['letter'] != '': words = words.filter( source__istartswith=letterform.cleaned_data['letter'] ) letter = letterform.cleaned_data['letter'] else: letter = '' paginator = Paginator(words, limit) try: words = paginator.page(page) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. words = paginator.page(paginator.num_pages) last_changes = Change.objects.last_changes(request.user).filter( dictionary__project=prj, dictionary__language=lang )[:10] return render( request, 'dictionary.html', { 'title': dict_title(prj, lang), 'project': prj, 'language': lang, 'page_obj': words, 'form': form, 'query_string': 'letter={}'.format(letter) if letter else '', 'uploadform': uploadform, 'letterform': letterform, 'letter': letter, 'limit': limit, 'page': page, 'last_changes': last_changes, 'last_changes_url': urlencode({ 'project': prj.slug, 'lang': lang.code, 'glossary': 1 }), } )
def show_glossary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) if request.method == "POST" and request.user.has_perm("glossary.add", prj): form = TermForm(prj, request.POST) if form.is_valid(): Term.objects.create( request.user, language=lang, source=form.cleaned_data["source"], target=form.cleaned_data["target"], glossary=form.cleaned_data["glossary"], ) return redirect_next(request.POST.get("next"), request.get_full_path()) form = TermForm(prj) uploadform = GlossaryUploadForm(prj) terms = Term.objects.for_project(prj).filter(language=lang).order() letterform = LetterForm(request.GET) searchform = OneTermForm(request.GET) if searchform.is_valid() and searchform.cleaned_data["term"] != "": terms = terms.filter(source__substring=searchform.cleaned_data["term"]) search = searchform.cleaned_data["term"] else: search = "" if letterform.is_valid() and letterform.cleaned_data["letter"] != "": terms = terms.filter( source__istartswith=letterform.cleaned_data["letter"]) letter = letterform.cleaned_data["letter"] else: letter = "" terms = get_paginator(request, terms) last_changes = (Change.objects.last_changes(request.user).filter( project=prj, language=lang).exclude(glossary_term=None)[:10]) exporters = EXPORTERS.list_exporters_filter(EXPORT_TYPES) return render( request, "glossary.html", { "title": dict_title(prj, lang), "project": prj, "language": lang, "page_obj": terms, "exporters": exporters, "form": form, "query_string": urlencode({ "term": search, "letter": letter }), "uploadform": uploadform, "letterform": letterform, "searchform": searchform, "letter": letter, "last_changes": last_changes, "last_changes_url": urlencode(( ("project", prj.slug), ("lang", lang.code), ("action", Change.ACTION_DICTIONARY_NEW), ("action", Change.ACTION_DICTIONARY_EDIT), ("action", Change.ACTION_DICTIONARY_UPLOAD), )), }, )
def show_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) if request.method == 'POST' and request.user.has_perm('glossary.add', prj): form = WordForm(request.POST) if form.is_valid(): Dictionary.objects.create( request.user, project=prj, language=lang, source=form.cleaned_data['source'], target=form.cleaned_data['target'] ) return redirect_next( request.POST.get('next'), request.get_full_path() ) form = WordForm() uploadform = DictUploadForm() words = Dictionary.objects.filter( project=prj, language=lang ).order_by(Lower('source')) letterform = LetterForm(request.GET) searchform = OneWordForm(request.GET) if searchform.is_valid() and searchform.cleaned_data['term'] != '': words = words.filter( source__icontains=searchform.cleaned_data['term'] ) search = searchform.cleaned_data['term'] else: search = '' if letterform.is_valid() and letterform.cleaned_data['letter'] != '': words = words.filter( source__istartswith=letterform.cleaned_data['letter'] ) letter = letterform.cleaned_data['letter'] else: letter = '' words = get_paginator(request, words) last_changes = Change.objects.last_changes(request.user).filter( dictionary__project=prj, dictionary__language=lang )[:10] return render( request, 'dictionary.html', { 'title': dict_title(prj, lang), 'project': prj, 'language': lang, 'page_obj': words, 'form': form, 'query_string': urlencode({ 'term': search, 'letter': letter }), 'uploadform': uploadform, 'letterform': letterform, 'searchform': searchform, 'letter': letter, 'last_changes': last_changes, 'last_changes_url': urlencode({ 'project': prj.slug, 'lang': lang.code, 'glossary': 1 }), } )
def show_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) if request.method == 'POST' and request.user.has_perm('glossary.add', prj): form = WordForm(request.POST) if form.is_valid(): Dictionary.objects.create( request.user, project=prj, language=lang, source=form.cleaned_data['source'], target=form.cleaned_data['target'] ) return redirect_next( request.POST.get('next'), request.get_full_path() ) else: form = WordForm() uploadform = DictUploadForm() words = Dictionary.objects.filter( project=prj, language=lang ).order_by(Lower('source')) letterform = LetterForm(request.GET) searchform = OneWordForm(request.GET) if searchform.is_valid() and searchform.cleaned_data['term'] != '': words = words.filter( source__icontains=searchform.cleaned_data['term'] ) search = searchform.cleaned_data['term'] else: search = '' if letterform.is_valid() and letterform.cleaned_data['letter'] != '': words = words.filter( source__istartswith=letterform.cleaned_data['letter'] ) letter = letterform.cleaned_data['letter'] else: letter = '' words = get_paginator(request, words) last_changes = Change.objects.last_changes(request.user).filter( dictionary__project=prj, dictionary__language=lang )[:10] return render( request, 'dictionary.html', { 'title': dict_title(prj, lang), 'project': prj, 'language': lang, 'page_obj': words, 'form': form, 'query_string': urlencode({ 'term': search, 'letter': letter }), 'uploadform': uploadform, 'letterform': letterform, 'searchform': searchform, 'letter': letter, 'last_changes': last_changes, 'last_changes_url': urlencode({ 'project': prj.slug, 'lang': lang.code, 'glossary': 1 }), } )