Esempio n. 1
0
def change_language(request, *args, **kwargs):
    me = 'language'
    state = 'change'
    lang = _get_lang(*args, **kwargs)
    old_name = lang.name
    user = request.user

    may_edit, (is_admin, is_manager) = may_edit_lang(user, lang)
    if not may_edit:
        return HttpResponseForbidden(error_forbidden)

    _LOG.info('%s about to change %s', user, lang)

    langform = LanguageForm(instance=lang)
    #profile = user.profile
    manager = lang.manager
    if is_manager:
        editorform = EditorForm(instance=lang)
    else:
        editorform = None
    _LOG.info('User is manager: %s', user == lang.manager)
    # sort values into categories
    cats = make_feature_list_for_lang(lang)

    if request.method == 'POST':
        langform = LanguageForm(data=request.POST,
                                instance=lang,
                                initial=request.POST)
        try:
            if langform.is_valid():
                with transaction.atomic():
                    new_lang = langform.save(commit=False)
                    new_name = new_lang.name
                    if new_name != old_name and language_exists(new_name):
                        new_name = escape(new_name)
                        url = '/language/%s/' % lang.get_slug()
                        msg = '''The name "%s" is taken,
                        see <a href="%s">%s</a>''' % (new_name, url, new_name)
                        messages.error(request, msg)
                    else:
                        _LOG.info('Actually changing %s!', lang)

                        lang = _change_editors_managers(
                            request, manager, new_lang, langform)

                        lang.last_modified_by = user

                        # break out in separate function
                        # greeting
                        greetingexercise = TranslationExercise.objects.get(
                            id=1)
                        new_greeting = lang.greeting
                        try:
                            greetingtrans = Translation.objects.get(
                                language=lang,
                                exercise=greetingexercise,
                                translator=user)
                        except Translation.DoesNotExist:
                            greetingtrans = None
                        if new_greeting:
                            if greetingtrans:
                                if new_greeting != greetingtrans.translation:
                                    greetingtrans.translation = new_greeting
                            else:
                                Translation.objects.create(
                                    language=lang,
                                    exercise=greetingexercise,
                                    translator=user,
                                    translation=new_greeting)
                        else:
                            if greetingtrans:
                                greetingtrans.delete()
                        # values
                        lang = set_featurevalues_for_lang(
                            lang, request.POST.getlist('value'))

                        # Final save
                        lang.save(user=user)
                        lang, tags_changed = set_tags_for_lang(
                            langform.cleaned_data['tags'], lang)
                        streamaction.send(user,
                                          verb='updated',
                                          action_object=lang)
                        return HttpResponseRedirect('.')
            else:
                error = "Couldn't change language-description: " + str(
                    langform.errors)
                messages.error(request, error)
        except ValueError:
            assert False, langform
    data = {
        'form': langform,
        'categories': cats,
        'editorform': editorform,
        #'moreinfoformset': moreinfoformset,
        'me': me,
        'state': state,
    }
    return render(request, 'language_form.html', data)
Esempio n. 2
0
def change_language(request, *args, **kwargs):
    me = 'language'
    state = 'change'
    lang = _get_lang(*args, **kwargs)
    old_name = lang.name
    user = request.user

    may_edit, (is_admin, is_manager) = may_edit_lang(user, lang)
    if not may_edit:
        return HttpResponseForbidden(error_forbidden)

    _LOG.info('%s about to change %s', user, lang)

    langform = LanguageForm(instance=lang)
    #profile = user.profile
    manager = lang.manager
    if is_manager:
        editorform = EditorForm(instance=lang)
    else:
        editorform = None
    _LOG.info('User is manager: %s', user == lang.manager)
    # sort values into categories
    cats = make_feature_list_for_lang(lang)

    if request.method == 'POST':
        langform = LanguageForm(data=request.POST, instance=lang, initial=request.POST)
        try:
            if langform.is_valid():
                with transaction.atomic():
                    new_lang = langform.save(commit=False)
                    new_name = new_lang.name
                    if new_name != old_name and language_exists(new_name):
                        new_name = escape(new_name)
                        url = '/language/%s/' % lang.get_slug()
                        msg = '''The name "%s" is taken,
                        see <a href="%s">%s</a>''' % (new_name, url, new_name)
                        messages.error(request, msg)
                    else:
                        _LOG.info('Actually changing %s!', lang)

                        lang = _change_editors_managers(request, manager, new_lang, langform)

                        lang.last_modified_by = user

                        # break out in separate function
                        # greeting
                        greetingexercise = TranslationExercise.objects.get(id=1)
                        new_greeting = lang.greeting
                        try:
                            greetingtrans = Translation.objects.get(language=lang, exercise=greetingexercise,
                                    translator=user)
                        except Translation.DoesNotExist:
                            greetingtrans = None
                        if new_greeting:
                            if greetingtrans:
                                if new_greeting != greetingtrans.translation:
                                    greetingtrans.translation = new_greeting
                            else:
                                Translation.objects.create(language=lang,
                                        exercise=greetingexercise, translator=user,
                                        translation=new_greeting)
                        else:
                            if greetingtrans:
                                greetingtrans.delete()
                        # values
                        lang = set_featurevalues_for_lang(lang, request.POST.getlist('value'))

                        # Final save
                        lang.save(user=user)
                        lang, tags_changed = set_tags_for_lang(langform.cleaned_data['tags'], lang)
                        streamaction.send(user, verb='updated', action_object=lang)
                        return HttpResponseRedirect('.')
            else:
                error = "Couldn't change language-description: " + str(langform.errors)
                messages.error(request, error)
        except ValueError:
            assert False, langform
    data = {'form': langform,
            'categories': cats,
            'editorform': editorform,
            #'moreinfoformset': moreinfoformset,
            'me': me,
            'state': state,}
    return render(request, 'language_form.html', data)
Esempio n. 3
0
def create_language(request,
                    lang=None,
                    fvlist=None,
                    clone=False,
                    *args,
                    **kwargs):
    me = 'language'
    state = 'new'
    user = request.user

    # sort values into categories
    cats = make_feature_list_for_lang(lang=lang, fvlist=fvlist)

    editorform = EditorForm()

    cloned_from_lang = None
    if clone:
        author = request.user.profile.display_name
        name = 'Clone'
        if lang:
            name = 'Clone of %s' % lang
        elif fvlist:
            name = 'Clone of %i features' % len(fvlist)
        background = name
        langform = LanguageForm(initial={
            'name': name,
            'background': background,
            'author': author
        })
        cloned_from_lang = lang
    else:
        langform = LanguageForm()

    if request.method == 'POST':
        langform = LanguageForm(data=request.POST, initial=request.POST)
        if langform.is_valid():
            with transaction.atomic():
                lang = langform.save(commit=False)
                if language_exists(lang.name):
                    url = '/language/%s/' % lang.get_slug()
                    msg = '''A language named <a href="%s">%s</a> already
                    exists, you should edit that one or change the name of
                    this one''' % (url, escape(lang.name))
                    messages.error(request, msg)
                else:
                    # Good, not a dupe
                    lang.added_by = user
                    lang.last_modified_by = user
                    if not lang.manager:
                        lang.manager = user
                    # Must save early since is foreign-key in many other tables
                    lang.save(user=user, solo=False)
                    # Save tags if any
                    lang, tags_changed = set_tags_for_lang(
                        langform.cleaned_data['tags'], lang)
                    # Set editors
                    editorform = EditorForm(data=request.POST, instance=lang)
                    if editorform.is_valid():
                        editorform.save()
                    # greeting
                    if lang.greeting:
                        # use signal instead?
                        greetingexercise = TranslationExercise.objects.get(
                            id=1)
                        trans = Translation(translation=lang.greeting,
                                            language=lang,
                                            translator=user,
                                            exercise=greetingexercise)
                        trans.save()

                    # values
                    lang = set_featurevalues_for_lang(
                        lang, request.POST.getlist('value'))

                    # Final save
                    lang.save(user=user)
                    if cloned_from_lang:
                        streamaction.send(request.user,
                                          verb='cloned the language',
                                          action_object=cloned_from_lang,
                                          target=lang)
                    else:
                        streamaction.send(request.user,
                                          verb='added the language',
                                          action_object=lang)
                    messages.info(
                        request,
                        'You successfully added the language %s to CALS' %
                        lang.name)
                    return HttpResponseRedirect('/language/%s/' % lang.slug)
        else:
            if not clone:
                error = "Couldn't store language-description: " + str(
                    langform.errors)
                messages.error(request, error)
            else:
                help = "Remember to fill out the name and author of the language"
                messages.warn(request, help)
    data = {
        'form': langform,
        'categories': cats,
        'me': me,
        'editorform': editorform,
        'state': state,
        'clone': clone,
    }
    return render(request, 'language_form.html', data)
Esempio n. 4
0
def create_language(request, lang=None, fvlist=None, clone=False, *args, **kwargs):
    me = 'language'
    state = 'new'
    user = request.user

    # sort values into categories
    cats = make_feature_list_for_lang(lang=lang, fvlist=fvlist)

    editorform = EditorForm()

    cloned_from_lang = None
    if clone:
        author = request.user.profile.display_name
        name = 'Clone'
        if lang:
            name = 'Clone of %s' % lang
        elif fvlist:
            name = 'Clone of %i features' % len(fvlist)
        background = name
        langform = LanguageForm(initial={
                'name': name,
                'background': background,
                'author': author})
        cloned_from_lang = lang
    else:
        langform = LanguageForm()

    if request.method == 'POST':
        langform = LanguageForm(data=request.POST, initial=request.POST)
        if langform.is_valid():
            with transaction.atomic():
                lang = langform.save(commit=False)
                if language_exists(lang.name):
                    url = '/language/%s/' % lang.get_slug()
                    msg = '''A language named <a href="%s">%s</a> already
                    exists, you should edit that one or change the name of
                    this one''' % (url, escape(lang.name))
                    messages.error(request, msg)
                else:
                    # Good, not a dupe
                    lang.added_by = user
                    lang.last_modified_by = user
                    if not lang.manager:
                        lang.manager = user
                    # Must save early since is foreign-key in many other tables
                    lang.save(user=user, solo=False)
                    # Save tags if any
                    lang, tags_changed = set_tags_for_lang(langform.cleaned_data['tags'], lang)
                    # Set editors
                    editorform = EditorForm(data=request.POST, instance=lang)
                    if editorform.is_valid():
                        editorform.save()
                    # greeting
                    if lang.greeting:
                        # use signal instead?
                        greetingexercise = TranslationExercise.objects.get(id=1)
                        trans = Translation(translation=lang.greeting, language=lang,
                                translator=user, exercise=greetingexercise)
                        trans.save()

                    # values
                    lang = set_featurevalues_for_lang(lang, request.POST.getlist('value'))

                    # Final save
                    lang.save(user=user)
                    if cloned_from_lang:
                        streamaction.send(request.user, verb='cloned the language', action_object=cloned_from_lang, target=lang)
                    else:
                        streamaction.send(request.user, verb='added the language', action_object=lang)
                    messages.info(request, 'You successfully added the language %s to CALS' % lang.name)
                    return HttpResponseRedirect('/language/%s/' % lang.slug)
        else:
            if not clone:
                error = "Couldn't store language-description: " + str(langform.errors)
                messages.error(request, error)
            else:
                help = "Remember to fill out the name and author of the language"
                messages.warn(request, help)
    data = {'form': langform,
            'categories': cats,
            'me': me,
            'editorform': editorform,
            'state': state,
            'clone': clone,
    }
    return render(request, 'language_form.html', data)