Exemplo n.º 1
0
def comment(request, pk):
    """Add new comment."""
    unit = get_object_or_404(Unit, pk=pk)
    check_access(request, unit.translation.subproject.project)

    if not can_add_comment(request.user, unit.translation.subproject.project):
        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)
Exemplo n.º 2
0
def add_dictionary(request, unit_id):
    unit = get_object_or_404(Unit, pk=int(unit_id))
    check_access(request, unit.translation.subproject.project)

    prj = unit.translation.subproject.project
    lang = unit.translation.language

    code = 403
    results = ''

    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']
            )
            code = 200
            results = render_to_string(
                'glossary-embed.html',
                {
                    'glossary': Dictionary.objects.get_words(unit),
                    'unit': unit,
                    'user': request.user,
                }
            )

    return JsonResponse(
        data={'responseCode': code, 'results': results}
    )
Exemplo n.º 3
0
def comment(request, pk):
    """Add new comment."""
    unit = get_object_or_404(Unit, pk=pk)
    check_access(request, unit.translation.subproject.project)

    if not can_add_comment(request.user, unit.translation.subproject.project):
        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)
Exemplo n.º 4
0
def add_dictionary(request, unit_id):
    unit = get_object_or_404(Unit, pk=int(unit_id))
    check_access(request, unit.translation.subproject.project)

    prj = unit.translation.subproject.project
    lang = unit.translation.language

    code = 403
    results = ''

    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'])
            code = 200
            results = render_to_string(
                'glossary-embed.html', {
                    'glossary': Dictionary.objects.get_words(unit),
                    'unit': unit,
                    'user': request.user,
                })

    return JsonResponse(data={'responseCode': code, 'results': results})
Exemplo n.º 5
0
def translate(request, unit_id):
    """AJAX handler for translating."""
    unit = get_object_or_404(Unit, pk=int(unit_id))
    check_access(request, unit.translation.subproject.project)
    if not can_use_mt(request.user, unit.translation):
        raise PermissionDenied()

    service_name = request.GET.get('service', 'INVALID')

    if service_name not in MACHINE_TRANSLATION_SERVICES:
        return HttpResponseBadRequest('Invalid service specified')

    translation_service = MACHINE_TRANSLATION_SERVICES[service_name]

    # Error response
    response = {
        'responseStatus': 500,
        'service': translation_service.name,
        'responseDetails': '',
        'translations': [],
        'lang': unit.translation.language.code,
        'dir': unit.translation.language.direction,
    }

    try:
        response['translations'] = translation_service.translate(
            unit.translation.language.code,
            unit.get_source_plurals()[0], unit, request.user)
        response['responseStatus'] = 200
    except Exception as exc:
        response['responseDetails'] = '{0}: {1}'.format(
            exc.__class__.__name__, str(exc))

    return JsonResponse(data=response, )
Exemplo n.º 6
0
def get_subproject(request, project, subproject, skip_acl=False):
    """Return subproject matching parameters."""
    subproject = get_object_or_404(SubProject.objects.prefetch(),
                                   project__slug=project,
                                   slug=subproject)
    if not skip_acl:
        check_access(request, subproject.project)
    return subproject
Exemplo n.º 7
0
def get_project(request, project, skip_acl=False):
    """Return project matching parameters."""
    project = get_object_or_404(
        Project,
        slug=project,
    )
    if not skip_acl:
        check_access(request, project)
    return project
Exemplo n.º 8
0
def get_translation(request, project, subproject, lang, skip_acl=False):
    """Return translation matching parameters."""
    translation = get_object_or_404(Translation.objects.prefetch(),
                                    language__code=lang,
                                    subproject__slug=subproject,
                                    subproject__project__slug=project)
    if not skip_acl:
        check_access(request, translation.subproject.project)
    return translation
Exemplo n.º 9
0
def get_project(request, project, skip_acl=False):
    """Return project matching parameters."""
    project = get_object_or_404(
        Project,
        slug=project,
    )
    if not skip_acl:
        check_access(request, project)
    return project
Exemplo n.º 10
0
def get_unit_changes(request, unit_id):
    """Return unit's recent changes."""
    unit = get_object_or_404(Unit, pk=int(unit_id))
    check_access(request, unit.translation.subproject.project)

    return render(
        request, 'js/changes.html', {
            'last_changes': unit.change_set.all()[:10],
            'last_changes_url': urlencode(unit.translation.get_kwargs()),
        })
Exemplo n.º 11
0
def get_component(request, project, component, skip_acl=False):
    """Return component matching parameters."""
    component = get_object_or_404(
        Component.objects.prefetch(),
        project__slug=project,
        slug=component
    )
    if not skip_acl:
        check_access(request, component.project)
    return component
Exemplo n.º 12
0
def get_subproject(request, project, subproject, skip_acl=False):
    """Return subproject matching parameters."""
    subproject = get_object_or_404(
        SubProject.objects.prefetch(),
        project__slug=project,
        slug=subproject
    )
    if not skip_acl:
        check_access(request, subproject.project)
    return subproject
Exemplo n.º 13
0
def ignore_check(request, check_id):
    obj = get_object_or_404(Check, pk=int(check_id))
    check_access(request, obj.project)

    if not can_ignore_check(request.user, obj.project):
        raise PermissionDenied()

    # Mark check for ignoring
    obj.set_ignore()
    # response for AJAX
    return HttpResponse('ok')
Exemplo n.º 14
0
Arquivo: js.py Projeto: saily/weblate
def ignore_check(request, check_id):
    obj = get_object_or_404(Check, pk=int(check_id))
    check_access(request, obj.project)

    if not can_ignore_check(request.user, obj.project):
        raise PermissionDenied()

    # Mark check for ignoring
    obj.set_ignore()
    # response for AJAX
    return HttpResponse('ok')
Exemplo n.º 15
0
def get_translation(request, project, subproject, lang, skip_acl=False):
    """Return translation matching parameters."""
    translation = get_object_or_404(
        Translation.objects.prefetch(),
        language__code=lang,
        subproject__slug=subproject,
        subproject__project__slug=project,
        enabled=True
    )
    if not skip_acl:
        check_access(request, translation.subproject.project)
    return translation
Exemplo n.º 16
0
Arquivo: js.py Projeto: X00LA/weblate
def get_unit_translations(request, unit_id):
    """Return unit's other translations."""
    unit = get_object_or_404(Unit, pk=int(unit_id))
    check_access(request, unit.translation.subproject.project)

    return render(
        request, 'js/translations.html', {
            'units':
            Unit.objects.filter(
                id_hash=unit.id_hash,
                translation__subproject=unit.translation.subproject,
            ).exclude(pk=unit.pk),
        })
Exemplo n.º 17
0
Arquivo: js.py Projeto: saily/weblate
def get_unit_changes(request, unit_id):
    """Return unit's recent changes."""
    unit = get_object_or_404(Unit, pk=int(unit_id))
    check_access(request, unit.translation.subproject.project)

    return render(
        request,
        'js/changes.html',
        {
            'last_changes': unit.change_set.all()[:10],
            'last_changes_url': urlencode(unit.translation.get_kwargs()),
        }
    )
Exemplo n.º 18
0
def delete_screenshot(request, pk):
    obj = get_object_or_404(Screenshot, pk=pk)
    check_access(request, obj.component.project)
    if not can_delete_screenshot(request.user, obj.component.project):
        raise PermissionDenied()

    kwargs = {
        'project': obj.component.project.slug,
        'subproject': obj.component.slug,
    }

    obj.delete()

    messages.success(request, _('Screenshot %s has been deleted.') % obj.name)

    return redirect('screenshots', **kwargs)
Exemplo n.º 19
0
def delete_screenshot(request, pk):
    obj = get_object_or_404(Screenshot, pk=pk)
    check_access(request, obj.component.project)
    if not can_delete_screenshot(request.user, obj.component.project):
        raise PermissionDenied()

    kwargs = {
        'project': obj.component.project.slug,
        'subproject': obj.component.slug,
    }

    obj.delete()

    messages.success(request, _('Screenshot %s has been deleted.') % obj.name)

    return redirect('screenshots', **kwargs)
Exemplo n.º 20
0
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)
Exemplo n.º 21
0
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)
Exemplo n.º 22
0
def add_dictionary(request, unit_id):
    unit = get_object_or_404(Unit, pk=int(unit_id))
    check_access(request, unit.translation.subproject.project)

    prj = unit.translation.subproject.project
    lang = unit.translation.language

    code = 403
    results = ''
    words = []

    if request.method == 'POST' and can_add_dictionary(request.user, prj):
        form = WordForm(request.POST)
        if form.is_valid():
            word = Dictionary.objects.create(
                request.user,
                project=prj,
                language=lang,
                source=form.cleaned_data['source'],
                target=form.cleaned_data['target']
            )
            words = form.cleaned_data['words']
            words.append(word.id)
            code = 200
            results = render_to_string(
                'glossary-embed.html',
                {
                    'glossary': (
                        Dictionary.objects.get_words(unit) |
                        Dictionary.objects.filter(project=prj, pk__in=words)
                    ),
                    'unit': unit,
                    'user': request.user,
                }
            )

    return JsonResponse(
        data={
            'responseCode': code,
            'results': results,
            'words': ','.join([str(x) for x in words])
        }
    )
Exemplo n.º 23
0
Arquivo: js.py Projeto: saily/weblate
def translate(request, unit_id):
    """AJAX handler for translating."""
    unit = get_object_or_404(Unit, pk=int(unit_id))
    check_access(request, unit.translation.subproject.project)
    if not can_use_mt(request.user, unit.translation):
        raise PermissionDenied()

    service_name = request.GET.get('service', 'INVALID')

    if service_name not in MACHINE_TRANSLATION_SERVICES:
        return HttpResponseBadRequest('Invalid service specified')

    translation_service = MACHINE_TRANSLATION_SERVICES[service_name]

    # Error response
    response = {
        'responseStatus': 500,
        'service': translation_service.name,
        'responseDetails': '',
        'translations': [],
        'lang': unit.translation.language.code,
        'dir': unit.translation.language.direction,
    }

    try:
        response['translations'] = translation_service.translate(
            unit.translation.language.code,
            unit.get_source_plurals()[0],
            unit,
            request.user
        )
        response['responseStatus'] = 200
    except Exception as exc:
        response['responseDetails'] = '{0}: {1}'.format(
            exc.__class__.__name__,
            str(exc)
        )

    return JsonResponse(
        data=response,
    )
Exemplo n.º 24
0
def get_screenshot(request, pk):
    obj = get_object_or_404(Screenshot, pk=pk)
    check_access(request, obj.component.project)
    if not can_change_screenshot(request.user, obj.component.project):
        raise PermissionDenied()
    return obj
Exemplo n.º 25
0
def get_screenshot(request, pk):
    obj = get_object_or_404(Screenshot, pk=pk)
    check_access(request, obj.component.project)
    if not can_change_screenshot(request.user, obj.component.project):
        raise PermissionDenied()
    return obj
Exemplo n.º 26
0
 def get_object(self, *args, **kwargs):
     obj = super(ScreenshotDetail, self).get_object(*args, **kwargs)
     check_access(self.request, obj.component.project)
     return obj
Exemplo n.º 27
0
 def get_object(self, *args, **kwargs):
     obj = super(ScreenshotDetail, self).get_object(*args, **kwargs)
     check_access(self.request, obj.component.project)
     return obj