示例#1
0
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
示例#2
0
文件: views.py 项目: kaleissin/CALS
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
示例#3
0
文件: views.py 项目: kaleissin/CALS
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)
示例#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)