def _change_editors_managers(request, manager_then, lang, langform): # editors and managers if request.user == manager_then: editorform = EditorForm(data=request.POST, instance=lang) if editorform.is_valid(): editors_then = set(lang.editors.all()) lang = editorform.save() editors_now = set(lang.editors.all()) new_editors = editors_now - editors_then _LOG.debug('New editors? %s', new_editors) for new_editor in new_editors: streamaction.send(manager_then, verb='grants edit rights to', action_object=new_editor, target=lang) former_editors = editors_then - editors_now _LOG.debug('Former editors? %s', former_editors) for former_editor in former_editors: streamaction.send(manager_then, verb='revokes edit rights from', action_object=former_editor, target=lang) manager_now = lang.manager _LOG.debug('Manager then: %s', manager_then) _LOG.debug('Manager now: %s', manager_now) if manager_now != manager_then: streamaction.send(manager_then, verb='retires as manager of', target=lang) streamaction.send(manager_now, verb='is the new manager of', target=lang) else: _LOG.debug('Editorform invalid: %s', editorform) if not 'manager' in langform.cleaned_data: lang.manager = manager_then else: _LOG.debug('User %s may not manage %s, manager is %s', request.user, lang, manager_then) # Just in case: must be manager also in view in order to # change who can be manager lang.manager = manager_then return lang
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)