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