Exemple #1
0
    def __call__(self, request, target=None, slug=None):
        # Default message
        message = request.messages.get_message(self.admin.id)

        # Fetch target?
        model = None
        if target:
            model = self.get_and_validate_target(request, target)
            self.original_name = self.get_target_name(model)
            if not model:
                return redirect(self.get_fallback_url(request))
        original_model = model
        
        # Get form type to instantiate
        FormType = self.get_form(request, target)
        
        #Submit form
        if request.method == 'POST':
            form = self.get_form_instance(FormType, request, model, self.get_initial_data(request, model), True)
            if form.is_valid():
                model, message = self.submit_form(request, form, model)
                if message.type != 'error':
                    request.messages.set_flash(message, message.type, self.admin.id)
                    # Redirect back to right page
                    try:
                        if 'save_new' in request.POST and self.get_new_url:
                            return redirect(self.get_new_url(request, model))
                    except AttributeError:
                        pass
                    try:
                        if 'save_edit' in request.POST and self.get_edit_url:
                            return redirect(self.get_edit_url(request, model))
                    except AttributeError:
                        pass
                    try:
                        if self.get_submit_url:
                            return redirect(self.get_submit_url(request, model))
                    except AttributeError:
                        pass
                    return redirect(self.get_fallback_url(request))
            else:
                message = Message(request, form.non_field_errors()[0])
                message.type = 'error'
        else:
            form = self.get_form_instance(FormType, request, model, self.get_initial_data(request, model))
            
        # Render form
        return request.theme.render_to_response(self.get_templates(self.template),
                                                {
                                                 'admin': self.admin,
                                                 'action': self,
                                                 'request': request,
                                                 'url': self.get_url(request, model),
                                                 'fallback': self.get_fallback_url(request),
                                                 'message': message,
                                                 'target': self.get_target_name(original_model),
                                                 'target_model': original_model,
                                                 'form': FormLayout(form, self.get_layout(request, form, target)),
                                                },
                                                context_instance=RequestContext(request));
Exemple #2
0
def settings(request, group_id=None, group_slug=None):
    # Load groups and find selected group
    settings_groups = Group.objects.all().order_by('key')
    if not group_id:
        active_group = settings_groups[0]
        group_id = active_group.pk
    else:
        group_id = int(group_id)
        for group in settings_groups:
            if group.pk == group_id:
                active_group = group
                break
        else:
            return error404(request, BasicMessage(_('The requested settings group could not be found.')))
            
    # Load selected group settings and turn them into form
    group_settings = Setting.objects.filter(group=active_group).order_by('position')
    last_fieldset = (None, [])
    group_form = {'layout': []}
    for setting in group_settings:
        # New field subgroup?
        if setting.separator and last_fieldset[0] != setting.separator:
            if last_fieldset[0]:
                group_form['layout'].append(last_fieldset)
            last_fieldset = (_(setting.separator), [])
        last_fieldset[1].append(setting.pk)
        group_form[setting.pk] = setting.get_field()
    group_form['layout'].append(last_fieldset)
    SettingsGroupForm = type('SettingsGroupForm', (Form,), group_form)
    
    #Submit form
    message = request.messages.get_message('admin_settings')
    if request.method == 'POST':
        form = SettingsGroupForm(request.POST, request=request)
        if form.is_valid():
            for setting in form.cleaned_data.keys():
                request.settings[setting] = form.cleaned_data[setting]
            request.messages.set_flash(BasicMessage(_('Configuration has been saved.')), 'success', 'admin_settings')
            return redirect(reverse('admin_settings', kwargs={
                                                       'group_id': active_group.pk,
                                                       'group_slug': active_group.key,
                                                       }))
        else:
            message = Message(request, form.non_field_errors()[0])
            message.type = 'error'
    else:
        form = SettingsGroupForm(request=request)
    
    # Display settings group form      
    return request.theme.render_to_response('settings/settings.html',
                                            {
                                            'message': message,
                                            'groups': settings_groups,
                                            'active_group': active_group,
                                            'search_form': FormFields(SearchForm(request=request)),
                                            'form': FormLayout(form),
                                            'raw_form': form,
                                            },
                                            context_instance=RequestContext(request));
Exemple #3
0
    def __call__(self, request, page=0):
        """
        Use widget as view
        """
        self.request = request

        # Get basic list items
        items_total = self.get_items()

        # Set extra filters?
        try:
            items_total = self.select_items(items_total).count()
        except AttributeError:
            items_total = items_total.count()

        # Set sorting and paginating
        sorting_method = self.get_sorting()
        paginating_method = self.get_pagination(items_total, page)

        # List items
        items = self.get_items()
        if not request.session.get(self.get_token('filter')):
            items = items.all()

        # Set extra filters?
        try:
            items = self.select_items(items)
        except AttributeError:
            pass

        # Sort them
        items = self.sort_items(items, sorting_method);

        # Set pagination
        if self.pagination:
            items = items[paginating_method['start']:paginating_method['stop']]

        # Prefetch related?
        try:
            items = self.prefetch_related(items)
        except AttributeError:
            pass

        # Default message
        message = None

        # See if we should make and handle search form
        search_form = None
        SearchForm = self.get_search_form()
        if SearchForm:
            if request.method == 'POST':
                # New search
                if request.POST.get('origin') == 'search':
                    search_form = SearchForm(request.POST, request=request)
                    if search_form.is_valid():
                        search_criteria = {}
                        for field, criteria in search_form.cleaned_data.items():
                            if len(criteria) > 0:
                                search_criteria[field] = criteria
                        if not search_criteria:
                            message = Message(_("No search criteria have been defined."))
                        else:
                            request.session[self.get_token('filter')] = search_criteria
                            return redirect(self.get_url())
                    else:
                        message = Message(_("Search form contains errors."))
                    message.type = 'error'
                else:
                    search_form = SearchForm(request=request)

                # Kill search
                if request.POST.get('origin') == 'clear' and self.is_filtering and request.csrf.request_secure(request):
                    request.session[self.get_token('filter')] = None
                    request.messages.set_flash(Message(_("Search criteria have been cleared.")), 'info', self.admin.id)
                    return redirect(self.get_url())
            else:
                if self.is_filtering:
                    search_form = SearchForm(request=request, initial=request.session.get(self.get_token('filter')))
                else:
                    search_form = SearchForm(request=request)

        # See if we sould make and handle tab form
        table_form = None
        TableForm = self.get_table_form(items)
        if TableForm:
            if request.method == 'POST' and request.POST.get('origin') == 'table':
                table_form = TableForm(request.POST, request=request)
                if table_form.is_valid():
                    message, redirect_url = self.table_action(items, table_form.cleaned_data)
                    if redirect_url:
                        request.messages.set_flash(message, message.type, self.admin.id)
                        return redirect(redirect_url)
                else:
                    message = Message(table_form.non_field_errors()[0], 'error')
            else:
                table_form = TableForm(request=request)

        # See if we should make and handle list form
        list_form = None
        ListForm = self.get_actions_form(items)
        if ListForm:
            if request.method == 'POST' and request.POST.get('origin') == 'list':
                list_form = ListForm(request.POST, request=request)
                if list_form.is_valid():
                    try:
                        form_action = getattr(self, 'action_' + list_form.cleaned_data['list_action'])
                        message, redirect_url = form_action(items, list_form.cleaned_data['list_items'])
                        if redirect_url:
                            request.messages.set_flash(message, message.type, self.admin.id)
                            return redirect(redirect_url)
                    except AttributeError:
                        message = Message(_("Action requested is incorrect."))
                else:
                    if 'list_items' in list_form.errors:
                        message = Message(self.nothing_checked_message)
                    elif 'list_action' in list_form.errors:
                        message = Message(_("Action requested is incorrect."))
                    else:
                        message = Message(list_form.non_field_errors()[0])
                message.type = 'error'
            else:
                list_form = ListForm(request=request)

        # Little hax to keep counters correct 
        items_shown = len(items)
        if items_total < items_shown:
            items_total = items_shown

        # Render list
        return request.theme.render_to_response(self.get_template(),
                                                self.add_template_variables({
                                                 'admin': self.admin,
                                                 'action': self,
                                                 'request': request,
                                                 'url': self.get_url(),
                                                 'messages_log': request.messages.get_messages(self.admin.id),
                                                 'message': message,
                                                 'sorting': self.sortables,
                                                 'sorting_method': sorting_method,
                                                 'pagination': paginating_method,
                                                 'list_form': FormLayout(list_form) if list_form else None,
                                                 'search_form': FormLayout(search_form) if search_form else None,
                                                 'table_form': FormFields(table_form).fields if table_form else None,
                                                 'items': items,
                                                 'items_total': items_total,
                                                 'items_shown': items_shown,
                                                }),
                                                context_instance=RequestContext(request));
Exemple #4
0
    def __call__(self, request, page=0):
        """
        Use widget as view
        """
        self.request = request

        # Get basic list items
        items_total = self.get_items()

        # Set extra filters?
        try:
            items_total = self.select_items(items_total).count()
        except AttributeError:
            items_total = items_total.count()

        # Set sorting and paginating
        sorting_method = self.get_sorting()
        try:
            paginating_method = self.get_pagination(items_total, page)
        except Http404:
            return redirect(self.get_url())

        # List items
        items = self.get_items()
        if not request.session.get(self.get_token('filter')):
            items = items.all()

        # Set extra filters?
        try:
            items = self.select_items(items)
        except AttributeError:
            pass

        # Sort them
        items = self.sort_items(items, sorting_method)

        # Set pagination
        if self.pagination:
            items = items[paginating_method['start']:paginating_method['stop']]

        # Prefetch related?
        try:
            items = self.prefetch_related(items)
        except AttributeError:
            pass

        # Default message
        message = None

        # See if we should make and handle search form
        search_form = None
        SearchForm = self.get_search_form()
        if SearchForm:
            if request.method == 'POST':
                # New search
                if request.POST.get('origin') == 'search':
                    search_form = SearchForm(request.POST, request=request)
                    if search_form.is_valid():
                        search_criteria = {}
                        for field, criteria in search_form.cleaned_data.items(
                        ):
                            if len(criteria) > 0:
                                search_criteria[field] = criteria
                        if not search_criteria:
                            message = Message(
                                _("No search criteria have been defined."))
                        else:
                            request.session[self.get_token(
                                'filter')] = search_criteria
                            return redirect(self.get_url())
                    else:
                        message = Message(_("Search form contains errors."))
                    message.type = 'error'
                else:
                    search_form = SearchForm(request=request)

                # Kill search
                if request.POST.get(
                        'origin'
                ) == 'clear' and self.is_filtering and request.csrf.request_secure(
                        request):
                    request.session[self.get_token('filter')] = None
                    request.messages.set_flash(
                        Message(_("Search criteria have been cleared.")),
                        'info', self.admin.id)
                    return redirect(self.get_url())
            else:
                if self.is_filtering:
                    search_form = SearchForm(request=request,
                                             initial=request.session.get(
                                                 self.get_token('filter')))
                else:
                    search_form = SearchForm(request=request)

        # See if we sould make and handle tab form
        table_form = None
        TableForm = self.get_table_form(items)
        if TableForm:
            if request.method == 'POST' and request.POST.get(
                    'origin') == 'table':
                table_form = TableForm(request.POST, request=request)
                if table_form.is_valid():
                    message, redirect_url = self.table_action(
                        items, table_form.cleaned_data)
                    if redirect_url:
                        request.messages.set_flash(message, message.type,
                                                   self.admin.id)
                        return redirect(redirect_url)
                else:
                    message = Message(table_form.non_field_errors()[0],
                                      'error')
            else:
                table_form = TableForm(request=request)

        # See if we should make and handle list form
        list_form = None
        ListForm = self.get_actions_form(items)
        if ListForm:
            if request.method == 'POST' and request.POST.get(
                    'origin') == 'list':
                list_form = ListForm(request.POST, request=request)
                if list_form.is_valid():
                    try:
                        form_action = getattr(
                            self,
                            'action_' + list_form.cleaned_data['list_action'])
                        message, redirect_url = form_action(
                            items, [
                                int(x)
                                for x in list_form.cleaned_data['list_items']
                            ])
                        if redirect_url:
                            request.messages.set_flash(message, message.type,
                                                       self.admin.id)
                            return redirect(redirect_url)
                    except AttributeError:
                        message = Message(_("Action requested is incorrect."))
                else:
                    if 'list_items' in list_form.errors:
                        message = Message(self.nothing_checked_message)
                    elif 'list_action' in list_form.errors:
                        message = Message(_("Action requested is incorrect."))
                    else:
                        message = Message(list_form.non_field_errors()[0])
                message.type = 'error'
            else:
                list_form = ListForm(request=request)

        # Little hax to keep counters correct
        items_shown = len(items)
        if items_total < items_shown:
            items_total = items_shown

        # Render list
        return request.theme.render_to_response(
            self.get_template(),
            self.add_template_variables({
                'admin':
                self.admin,
                'action':
                self,
                'request':
                request,
                'url':
                self.get_url(),
                'messages_log':
                request.messages.get_messages(self.admin.id),
                'message':
                message,
                'sorting':
                self.sortables,
                'sorting_method':
                sorting_method,
                'pagination':
                paginating_method,
                'list_form':
                FormLayout(list_form) if list_form else None,
                'search_form':
                FormLayout(search_form) if search_form else None,
                'table_form':
                FormFields(table_form).fields if table_form else None,
                'items':
                items,
                'items_total':
                items_total,
                'items_shown':
                items_shown,
            }),
            context_instance=RequestContext(request))
Exemple #5
0
def settings(request, group_id=None, group_slug=None):
    # Load groups and find selected group
    settings_groups = Group.objects.all().order_by('key')
    if not group_id:
        active_group = settings_groups[0]
        group_id = active_group.pk
    else:
        group_id = int(group_id)
        for group in settings_groups:
            if group.pk == group_id:
                active_group = group
                break
        else:
            return error404(
                request,
                BasicMessage(
                    _('The requested settings group could not be found.')))

    # Load selected group settings and turn them into form
    group_settings = Setting.objects.filter(
        group=active_group).order_by('position')
    last_fieldset = (None, [])
    group_form = {'layout': []}
    for setting in group_settings:
        # New field subgroup?
        if setting.separator and last_fieldset[0] != setting.separator:
            if last_fieldset[0]:
                group_form['layout'].append(last_fieldset)
            last_fieldset = (_(setting.separator), [])
        last_fieldset[1].append(setting.pk)
        group_form[setting.pk] = setting.get_field()
    group_form['layout'].append(last_fieldset)
    SettingsGroupForm = type('SettingsGroupForm', (Form, ), group_form)

    #Submit form
    message = request.messages.get_message('admin_settings')
    if request.method == 'POST':
        form = SettingsGroupForm(request.POST, request=request)
        if form.is_valid():
            for setting in form.cleaned_data.keys():
                request.settings[setting] = form.cleaned_data[setting]
            request.messages.set_flash(
                BasicMessage(_('Configuration has been saved.')), 'success',
                'admin_settings')
            return redirect(
                reverse('admin_settings',
                        kwargs={
                            'group_id': active_group.pk,
                            'group_slug': active_group.key,
                        }))
        else:
            message = Message(request, form.non_field_errors()[0])
            message.type = 'error'
    else:
        form = SettingsGroupForm(request=request)

    # Display settings group form
    return request.theme.render_to_response(
        'settings/settings.html', {
            'message': message,
            'groups': settings_groups,
            'active_group': active_group,
            'search_form': FormFields(SearchForm(request=request)),
            'form': FormLayout(form),
            'raw_form': form,
        },
        context_instance=RequestContext(request))
Exemple #6
0
def signin(request):
    message = request.messages.get_message('security')
    if request.method == 'POST':
        form = SignInForm(
                          request.POST,
                          show_remember_me=not request.firewall.admin and request.settings['remember_me_allow'],
                          show_stay_hidden=not request.firewall.admin and request.settings['sessions_hidden'],
                          request=request
                          )
        if form.is_valid():
            try:
                # Configure correct auth and redirect links
                if request.firewall.admin:
                    auth_method = auth_admin
                    success_redirect = reverse(site.get_admin_index())
                else:
                    auth_method = auth_forum
                    success_redirect = reverse('index')
                
                # Authenticate user
                user = auth_method(
                                  request,
                                  form.cleaned_data['user_email'],
                                  form.cleaned_data['user_password'],
                                  )
                
                if not request.firewall.admin and request.settings['sessions_hidden'] and form.cleaned_data['user_stay_hidden']:
                    request.session.hidden = True                    
                
                sign_user_in(request, user, request.session.hidden)     
                           
                remember_me_token = False
                if not request.firewall.admin and request.settings['remember_me_allow'] and form.cleaned_data['user_remember_me']:
                    remember_me_token = get_random_string(42)
                    remember_me = Token(
                                        id=remember_me_token,
                                        user=user,
                                        created=timezone.now(),
                                        accessed=timezone.now(),
                                        hidden=request.session.hidden
                                        )
                    remember_me.save()
                if remember_me_token:
                    request.cookie_jar.set('TOKEN', remember_me_token, True)
                request.messages.set_flash(Message(request, 'security/signed_in', extra={'user': user}), 'success', 'security')
                return redirect(success_redirect)
            except AuthException as e:
                message = Message(request, e.type, extra={'user':e.user, 'ban':e.ban})
                message.type = 'error'
                # If not in Admin, register failed attempt
                if not request.firewall.admin and e.type == auth.CREDENTIALS:
                    SignInAttempt.objects.register_attempt(request.session.get_ip(request))
                    # Have we jammed our account?
                    if SignInAttempt.objects.is_jammed(request.settings, request.session.get_ip(request)):
                        request.jam.expires = timezone.now()
                        return redirect(reverse('sign_in'))
        else:
            message = Message(request, form.non_field_errors()[0])
            message.type = 'error'
    else:
        form = SignInForm(
                          show_remember_me=not request.firewall.admin and request.settings['remember_me_allow'],
                          show_stay_hidden=not request.firewall.admin and request.settings['sessions_hidden'],
                          request=request
                          )
    return request.theme.render_to_response('signin.html',
                                            {
                                             'message': message,
                                             'form': FormLayout(form, [
                                                 (
                                                     None,
                                                     [('user_email', {'attrs': {'placeholder': _("Enter your e-mail")}}), ('user_password', {'has_value': False, 'placeholder': _("Enter your password")})]
                                                 ),
                                                 (
                                                     None,
                                                     ['user_remember_me', 'user_stay_hidden'],
                                                 ),
                                             ]),
                                             'hide_signin': True, 
                                            },
                                            context_instance=RequestContext(request));
Exemple #7
0
    def __call__(self, request, page=0):
        """
        Use widget as view
        """
        self.request = request

        # Get basic list items
        items_total = self.get_items()

        # Set extra filters?
        try:
            items_total = self.select_items(items_total).count()
        except AttributeError:
            items_total = items_total.count()

        # Set sorting and paginating
        sorting_method = self.get_sorting()
        try:
            paginating_method = self.get_pagination(items_total, page)
        except Http404:
            return redirect(self.get_url())

        # List items
        items = self.get_items()
        if not request.session.get(self.get_token("filter")):
            items = items.all()

        # Set extra filters?
        try:
            items = self.select_items(items)
        except AttributeError:
            pass

        # Sort them
        items = self.sort_items(items, sorting_method)

        # Set pagination
        if self.pagination:
            items = items[paginating_method["start"] : paginating_method["stop"]]

        # Prefetch related?
        try:
            items = self.prefetch_related(items)
        except AttributeError:
            pass

        # Default message
        message = None

        # See if we should make and handle search form
        search_form = None
        SearchForm = self.get_search_form()
        if SearchForm:
            if request.method == "POST":
                # New search
                if request.POST.get("origin") == "search":
                    search_form = SearchForm(request.POST, request=request)
                    if search_form.is_valid():
                        search_criteria = {}
                        for field, criteria in search_form.cleaned_data.items():
                            if len(criteria) > 0:
                                search_criteria[field] = criteria
                        if not search_criteria:
                            message = Message(_("No search criteria have been defined."))
                        else:
                            request.session[self.get_token("filter")] = search_criteria
                            return redirect(self.get_url())
                    else:
                        message = Message(_("Search form contains errors."))
                    message.type = "error"
                else:
                    search_form = SearchForm(request=request)

                # Kill search
                if request.POST.get("origin") == "clear" and self.is_filtering and request.csrf.request_secure(request):
                    request.session[self.get_token("filter")] = None
                    request.messages.set_flash(Message(_("Search criteria have been cleared.")), "info", self.admin.id)
                    return redirect(self.get_url())
            else:
                if self.is_filtering:
                    search_form = SearchForm(request=request, initial=request.session.get(self.get_token("filter")))
                else:
                    search_form = SearchForm(request=request)

        # See if we sould make and handle tab form
        table_form = None
        TableForm = self.get_table_form(items)
        if TableForm:
            if request.method == "POST" and request.POST.get("origin") == "table":
                table_form = TableForm(request.POST, request=request)
                if table_form.is_valid():
                    message, redirect_url = self.table_action(items, table_form.cleaned_data)
                    if redirect_url:
                        request.messages.set_flash(message, message.type, self.admin.id)
                        return redirect(redirect_url)
                else:
                    message = Message(table_form.non_field_errors()[0], "error")
            else:
                table_form = TableForm(request=request)

        # See if we should make and handle list form
        list_form = None
        ListForm = self.get_actions_form(items)
        if ListForm:
            if request.method == "POST" and request.POST.get("origin") == "list":
                list_form = ListForm(request.POST, request=request)
                if list_form.is_valid():
                    try:
                        form_action = getattr(self, "action_" + list_form.cleaned_data["list_action"])
                        message, redirect_url = form_action(
                            items, [int(x) for x in list_form.cleaned_data["list_items"]]
                        )
                        if redirect_url:
                            request.messages.set_flash(message, message.type, self.admin.id)
                            return redirect(redirect_url)
                    except AttributeError:
                        message = Message(_("Action requested is incorrect."))
                else:
                    if "list_items" in list_form.errors:
                        message = Message(self.nothing_checked_message)
                    elif "list_action" in list_form.errors:
                        message = Message(_("Action requested is incorrect."))
                    else:
                        message = Message(list_form.non_field_errors()[0])
                message.type = "error"
            else:
                list_form = ListForm(request=request)

        # Little hax to keep counters correct
        items_shown = len(items)
        if items_total < items_shown:
            items_total = items_shown

        # Render list
        return request.theme.render_to_response(
            self.get_template(),
            self.add_template_variables(
                {
                    "admin": self.admin,
                    "action": self,
                    "request": request,
                    "url": self.get_url(),
                    "messages_log": request.messages.get_messages(self.admin.id),
                    "message": message,
                    "sorting": self.sortables,
                    "sorting_method": sorting_method,
                    "pagination": paginating_method,
                    "list_form": FormLayout(list_form) if list_form else None,
                    "search_form": FormLayout(search_form) if search_form else None,
                    "table_form": FormFields(table_form).fields if table_form else None,
                    "items": items,
                    "items_total": items_total,
                    "items_shown": items_shown,
                }
            ),
            context_instance=RequestContext(request),
        )