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)
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)
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)
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)