diff options
author | Adolfo Fitoria <adolfo.fitoria@gmail.com> | 2012-08-17 19:35:36 -0600 |
---|---|---|
committer | Adolfo Fitoria <adolfo.fitoria@gmail.com> | 2012-08-18 20:33:39 -0600 |
commit | b7a8b04ecc1b0e7636b9647496591e06edf195d6 (patch) | |
tree | 49940c962cb8c451a346eb8ee20cdce516d89223 | |
parent | bd1e4e99d8048d42e1781ea71ec7b348ff0358e8 (diff) | |
download | askbot-b7a8b04ecc1b0e7636b9647496591e06edf195d6.tar.gz askbot-b7a8b04ecc1b0e7636b9647496591e06edf195d6.tar.bz2 askbot-b7a8b04ecc1b0e7636b9647496591e06edf195d6.zip |
refactored views, made them generic, added translations into the urls.
-rw-r--r-- | askbot/models/widgets.py | 2 | ||||
-rw-r--r-- | askbot/skins/default/templates/embed/delete_question_widget.html | 13 | ||||
-rw-r--r-- | askbot/skins/default/templates/embed/delete_widget.html (renamed from askbot/skins/default/templates/embed/delete_ask_widget.html) | 6 | ||||
-rw-r--r-- | askbot/skins/default/templates/embed/list_widgets.html (renamed from askbot/skins/default/templates/embed/list_ask_widget.html) | 6 | ||||
-rw-r--r-- | askbot/skins/default/templates/embed/widget_form.html (renamed from askbot/skins/default/templates/embed/ask_widget_form.html) | 4 | ||||
-rw-r--r-- | askbot/skins/default/templates/embed/widgets.html | 15 | ||||
-rw-r--r-- | askbot/tests/widget_tests.py | 28 | ||||
-rw-r--r-- | askbot/urls.py | 59 | ||||
-rw-r--r-- | askbot/views/widgets.py | 131 |
9 files changed, 123 insertions, 141 deletions
diff --git a/askbot/models/widgets.py b/askbot/models/widgets.py index e7c4bfab..473a2b73 100644 --- a/askbot/models/widgets.py +++ b/askbot/models/widgets.py @@ -70,6 +70,8 @@ class CreateAskWidgetForm(forms.ModelForm, FormWithHideableFields): class CreateQuestionWidgetForm(forms.ModelForm, FormWithHideableFields): tagnames = TagNamesField() + group = forms.ModelChoiceField(queryset=get_groups().exclude(name__startswith='_internal'), + required=False) #def __init__(self, *args, **kwargs): # super(CreateQuestionWidgetForm, self).__init__(*args, **kwargs) diff --git a/askbot/skins/default/templates/embed/delete_question_widget.html b/askbot/skins/default/templates/embed/delete_question_widget.html deleted file mode 100644 index 52783e9d..00000000 --- a/askbot/skins/default/templates/embed/delete_question_widget.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends "one_column_body.html" %} -<!-- create_ask_widget.html --> -{% block title %}Delete Ask Question Widget{% endblock %} -{% block content %} -<h1>Are you sure that you cant to delete this Ask Question Widget?</h1> -<br/> -<strong>Warning: This could break the widgets on sites that currently use this widget please make sure that you don't use the widget in other sites</strong> -<form action="." method="POST"> - <p><input type='submit' value='Delete' /> <a href="{% url list_ask_widgets %}">Go Back</a></p> -</form> -{% endblock %} -{% block endjs %} -{% endblock %} diff --git a/askbot/skins/default/templates/embed/delete_ask_widget.html b/askbot/skins/default/templates/embed/delete_widget.html index 17f48b8c..ed80c537 100644 --- a/askbot/skins/default/templates/embed/delete_ask_widget.html +++ b/askbot/skins/default/templates/embed/delete_widget.html @@ -1,12 +1,12 @@ {% extends "one_column_body.html" %} <!-- create_ask_widget.html --> -{% block title %}Delete Ask Question Widget{% endblock %} +{% block title %}Delete {{widget_name|capitalize}} Widget{% endblock %} {% block content %} -<h1>Are you sure that you cant to delete this Ask Question Widget?</h1> +<h1>Are you sure that you cant to delete this {{widget_name|capitalize}}Widget?</h1> <br/> <strong>Warning: This could break the widgets on sites that currently use this widget please make sure that you don't use the widget in other sites</strong> <form action="." method="POST"> - <p><input type='submit' value='Delete' /> <a href="{% url list_ask_widgets %}">Go Back</a></p> + <p><input type='submit' value='Delete' /> <a href="{% url list_widgets widget_name %}">Go Back</a></p> </form> {% endblock %} {% block endjs %} diff --git a/askbot/skins/default/templates/embed/list_ask_widget.html b/askbot/skins/default/templates/embed/list_widgets.html index 27b8a20a..fcba7fc4 100644 --- a/askbot/skins/default/templates/embed/list_ask_widget.html +++ b/askbot/skins/default/templates/embed/list_widgets.html @@ -1,8 +1,8 @@ {% extends "two_column_body.html" %} <!-- create_ask_widget.html --> -{% block title %}Create a Widget{% endblock %} +{% block title %}{{widget_name|capitalize}} widget list{% endblock %} {% block content %} -<h1>Ask Question widget list</h1> + <h1>{{widget_name|capitalize}} widget list</h1> <table border="0"> <tr> @@ -14,7 +14,7 @@ <tr> <td>{{widget.title}}</td> <td> <script type="text/javascript" src="http://{{request.get_host()}}{% url render_ask_widget widget.id%}" ></script></td> - <td><a href="{% url edit_ask_widget widget.id %}">Edit</a> | <a href="{% url delete_ask_widget widget.id %}">Delete</a></td> + <td><a href="{% url edit_widget widget_name, widget.id %}">Edit</a> | <a href="{% url delete_widget widget_name, widget.id %}">Delete</a></td> </tr> {%endfor%} </table> diff --git a/askbot/skins/default/templates/embed/ask_widget_form.html b/askbot/skins/default/templates/embed/widget_form.html index e082b175..a658050c 100644 --- a/askbot/skins/default/templates/embed/ask_widget_form.html +++ b/askbot/skins/default/templates/embed/widget_form.html @@ -1,8 +1,8 @@ {% extends "one_column_body.html" %} <!-- create_ask_widget.html --> -{% block title %}{% trans %}Create an Ask a Question widget{% endtrans %}{% endblock %} +{% block title %}{% trans %}Create an {{widget_name}} widget{% endtrans %}{% endblock %} {% block content %} -<h1 class="section-title">{% trans %}Create an ask a questions widget{% endtrans %}</h1> +<h1 class="section-title">{% trans %}Create an {{widget_name}} widget{% endtrans %}</h1> {#% if form.non_field_errors() %} {{ form.non_field_errors() }} {% endif %#} diff --git a/askbot/skins/default/templates/embed/widgets.html b/askbot/skins/default/templates/embed/widgets.html index 4c7a633e..767ebc2c 100644 --- a/askbot/skins/default/templates/embed/widgets.html +++ b/askbot/skins/default/templates/embed/widgets.html @@ -14,10 +14,19 @@ <tbody> <tr> <td>{% trans %}Ask a question{% endtrans %}</td> - <td><a href="{% url create_ask_widget %}">{% trans %}create{% endtrans %}</a></td> + <td><a href="{% url create_widget 'ask' %}">{% trans %}create{% endtrans %}</a></td> <td> - {% if ask_widgets.count() > 0 %} - <a href="{% url list_ask_widgets %}">{% trans %}view list{% endtrans %}</a> + {% if ask_widgets > 0 %} + <a href="{% url list_widgets 'ask' %}">{% trans %}view list{% endtrans %}</a> + {% endif %} + </td> + </tr> + <tr> + <td>{% trans %}List of questions{% endtrans %}</td> + <td><a href="{% url create_widget 'question' %}">{% trans %}create{% endtrans %}</a></td> + <td> + {% if question_widgets > 0 %} + <a href="{% url list_widgets 'question' %}">{% trans %}view list{% endtrans %}</a> {% endif %} </td> </tr> diff --git a/askbot/tests/widget_tests.py b/askbot/tests/widget_tests.py index 0ead07f5..dbb6d635 100644 --- a/askbot/tests/widget_tests.py +++ b/askbot/tests/widget_tests.py @@ -81,45 +81,51 @@ class WidgetCreatorViewsTests(AskbotTestCase): def test_list_ask_widget_view(self): self.client.login(username='user1', password='testpass') - response = self.client.get(reverse('list_ask_widgets')) + response = self.client.get(reverse('list_widgets', args=('ask',))) self.assertEquals(response.status_code, 200) self.assertTrue('widgets' in response.context) def test_create_ask_widget_get(self): self.client.login(username='user1', password='testpass') - response = self.client.get(reverse('create_ask_widget')) + response = self.client.get(reverse('create_widget', args=('ask',))) self.assertEquals(response.status_code, 200) self.assertTrue('form' in response.context) def test_create_ask_widget_post(self): self.client.login(username='user1', password='testpass') post_data = {'title': 'Test widget'} - response = self.client.post(reverse('create_ask_widget'), post_data) + response = self.client.post(reverse('create_widget', args=('ask',)), post_data) self.assertEquals(response.status_code, 302) def test_edit_ask_widget_get(self): self.client.login(username='user1', password='testpass') - response = self.client.get(reverse('edit_ask_widget', - args=(self.widget.id, ))) + response = self.client.get(reverse('edit_widget', + args=('ask', self.widget.id, ))) self.assertEquals(response.status_code, 200) self.assertTrue('form' in response.context) def test_edit_ask_widget_post(self): self.client.login(username='user1', password='testpass') post_data = {'title': 'Test lalalla'} - response = self.client.post(reverse('edit_ask_widget', - args=(self.widget.id, )), post_data) + response = self.client.post(reverse('edit_widget', + args=('ask', self.widget.id, )), post_data) self.assertEquals(response.status_code, 302) def test_delete_ask_widget_get(self): self.client.login(username='user1', password='testpass') - response = self.client.get(reverse('delete_ask_widget', - args=(self.widget.id, ))) + response = self.client.get(reverse('delete_widget', + args=('ask', self.widget.id, ))) self.assertEquals(response.status_code, 200) self.assertTrue('widget' in response.context) def test_delete_ask_widget_post(self): self.client.login(username='user1', password='testpass') - response = self.client.post(reverse('delete_ask_widget', - args=(self.widget.id, ))) + response = self.client.post(reverse('delete_widget', + args=('ask', self.widget.id, ))) self.assertEquals(response.status_code, 302) + + #this test complains about 404.html template but it's correct + #def test_bad_url(self): + # self.client.login(username='user1', password='testpass') + # response = self.client.get('/widgets/foo/create/') + # self.assertEquals(404, response.status_code) diff --git a/askbot/urls.py b/askbot/urls.py index 287403b4..8beaa6ba 100644 --- a/askbot/urls.py +++ b/askbot/urls.py @@ -377,78 +377,63 @@ urlpatterns = patterns('', ), #widgets url! url( - r'^widgets/$', + r'^%s$' % (_('widgets/')), views.widgets.widgets, name = 'widgets' ), url( - r'^widgets/ask/(?P<widget_id>\d+)/$', + r'^%s%s(?P<widget_id>\d+)/$' % (_('widgets/'), _('ask/')), views.widgets.ask_widget, name = 'ask_by_widget' ), url( - r'^widgets/ask/(?P<widget_id>\d+).js$', + r'^%s%s(?P<widget_id>\d+).js$' % (_('widgets/'), _('ask/')), views.widgets.render_ask_widget_js, name = 'render_ask_widget' ), url( - r'^widgets/ask/(?P<widget_id>\d+).css$', + r'^%s%s(?P<widget_id>\d+).css$' % (_('widgets/'), _('ask/')), views.widgets.render_ask_widget_css, name = 'render_ask_widget_css' ), url( - r'^widgets/ask/complete/$', + r'^%s%s%s$' % (_('widgets/'), _('ask/'), _('complete/')), views.widgets.ask_widget_complete, name = 'ask_by_widget_complete' ), url( - r'^widgets/ask/create/$', - views.widgets.create_ask_widget, - name = 'create_ask_widget' + r'^%s(?P<model>\w+)/%s$' % (_('widgets/'), _('create/')), + views.widgets.create_widget, + name = 'create_widget' ), url( - r'^widgets/ask/edit/(?P<widget_id>\d+)/$', - views.widgets.edit_ask_widget, - name = 'edit_ask_widget' + r'^%s(?P<model>\w+)/%s(?P<widget_id>\d+)/$' % (_('widgets/'), _('edit/')), + views.widgets.edit_widget, + name = 'edit_widget' ), url( - r'^widgets/ask/delete/(?P<widget_id>\d+)/$', - views.widgets.delete_ask_widget, - name = 'delete_ask_widget' + r'^%s(?P<model>\w+)/%s(?P<widget_id>\d+)/$' % (_('widgets/'), _('delete/')), + views.widgets.delete_widget, + name = 'delete_widget' ), url( - r'^widgets/ask/$', - views.widgets.list_ask_widget, - name = 'list_ask_widgets' + r'^%s(?P<model>\w+)/$' % (_('widgets/')), + views.widgets.list_widgets, + name = 'list_widgets' ), #url( # r'^%s%s$' % (_('widgets/'), _('questions/')), # views.widgets.widget_questions, # name='widget_questions' #), - url( - r'^widgets/questions/(?P<widget_id>\d+)/$', - views.widgets.question_widget, - name = 'question_widget' - ), - url( - r'^widgets/question/create/$', - views.widgets.create_question_widget, - name = 'create_question_widget' - ), - url( - r'^widgets/question/edit/(?P<widget_id>\d+)/$', - views.widgets.edit_question_widget, - name = 'edit_question_widget' - ), - url( - r'^widgets/question/delete/(?P<widget_id>\d+)/$', - views.widgets.delete_question_widget, - name = 'delete_question_widget' - ), + #url( + # r'^widgets/questions/(?P<widget_id>\d+)/$', + # views.widgets.question_widget, + # name = 'question_widget' + #), url( r'^feeds/(?P<url>.*)/$', 'django.contrib.syndication.views.feed', diff --git a/askbot/views/widgets.py b/askbot/views/widgets.py index 3d63e056..8579c7e1 100644 --- a/askbot/views/widgets.py +++ b/askbot/views/widgets.py @@ -2,7 +2,7 @@ from datetime import datetime from django.core import exceptions from django.template import Context -from django.http import HttpResponse +from django.http import HttpResponse, Http404 from django.views.decorators import csrf from django.core.urlresolvers import reverse from django.shortcuts import redirect, get_object_or_404 @@ -15,11 +15,35 @@ from askbot.utils import decorators from askbot import models from askbot import forms +WIDGETS_MODELS = { + 'ask': models.AskWidget, + 'question': models.QuestionWidget + } + +WIDGETS_FORMS = { + 'ask': models.widgets.CreateAskWidgetForm, + 'question': models.widgets.CreateQuestionWidgetForm, + } + +def _get_model(key): + '''like get_object_or_404 but for our models''' + try: + return WIDGETS_MODELS[key] + except KeyError: + raise Http404 + +def _get_form(key): + '''like get_object_or_404 but for our forms''' + try: + return WIDGETS_FORMS[key] + except KeyError: + raise Http404 @decorators.admins_only def widgets(request): data = { - 'ask_widgets': models.AskWidget.objects.all(), + 'ask_widgets': models.AskWidget.objects.all().count(), + 'question_widgets': models.QuestionWidget.objects.all().count(), 'page_class': 'widgets' } return render_into_skin('embed/widgets.html', data, request) @@ -111,48 +135,59 @@ def ask_widget_complete(request): @decorators.admins_only -def list_ask_widget(request): - widgets = models.AskWidget.objects.all() - data = {'widgets': widgets} - return render_into_skin('embed/list_ask_widget.html', data, request) +def list_widgets(request, model): + model_class = _get_model(model) + widgets = model_class.objects.all() + data = { + 'widgets': widgets, + 'widget_name': model + } + return render_into_skin('embed/list_widgets.html', data, request) @decorators.admins_only -def create_ask_widget(request): +def create_widget(request, model): + form_class = _get_form(model) if request.method == 'POST': - form = models.widgets.CreateAskWidgetForm(request.POST) + form = form_class(request.POST) if form.is_valid(): form.save() - return redirect('list_ask_widgets') + return redirect('list_widgets', model=model) else: - form = models.widgets.CreateAskWidgetForm() + form = form_class() + + data = {'form': form, + 'widget_name': model} - data = {'form': form} - return render_into_skin('embed/ask_widget_form.html', data, request) + return render_into_skin('embed/widget_form.html', data, request) @decorators.admins_only -def edit_ask_widget(request, widget_id): - widget = get_object_or_404(models.AskWidget, pk=widget_id) +def edit_widget(request, model, widget_id): + model_class = _get_model(model) + form_class = _get_form(model) + widget = get_object_or_404(model_class, pk=widget_id) if request.method == 'POST': - form = models.widgets.CreateAskWidgetForm(request.POST, + form = form_class(request.POST, instance=widget) if form.is_valid(): form.save() - return redirect('list_ask_widgets') + return redirect('list_widgets', model=model) else: - form = models.widgets.CreateAskWidgetForm(instance=widget) + form = form_class(instance=widget) - data = {'form': form} - return render_into_skin('embed/ask_widget_form.html', data, request) + data = {'form': form, + 'widget_name': model} + return render_into_skin('embed/widget_form.html', data, request) @decorators.admins_only -def delete_ask_widget(request, widget_id): - widget = get_object_or_404(models.AskWidget, pk=widget_id) +def delete_widget(request, model, widget_id): + model_class = _get_model(model) + widget = get_object_or_404(model_class, pk=widget_id) if request.method == "POST": widget.delete() - return redirect('list_ask_widgets') + return redirect('list_widgets', model=model) else: - return render_into_skin('embed/delete_ask_widget.html', - {'widget': widget}, request) + return render_into_skin('embed/delete_widget.html', + {'widget': widget, 'widget_name': model}, request) #TODO: Add cache def render_ask_widget_js(request, widget_id): @@ -177,10 +212,12 @@ def render_ask_widget_css(request, widget_id): return HttpResponse(content, mimetype='text/css') #search widget -def widget_questions(request): +def question_widget(request, widget_id): """Returns the first x questions based on certain tags. @returns template with those questions listed.""" # make sure this is a GET request with the correct parameters. + widget = get_object_or_404(models.QuestionWidget, pk=widget_id) + if request.method != 'GET': raise Http404 @@ -194,47 +231,3 @@ def widget_questions(request): data = { 'threads': threads } return render_into_skin('embed/question_widget.html', data, request) - -@decorators.admins_only -def list_question_widget(request): - widgets = models.QuestionWidget.objects.all() - data = {'widgets': widgets} - return render_into_skin('embed/list_question_widget.html', data, request) - -@decorators.admins_only -def create_question_widget(request): - if request.method == 'POST': - form = models.widgets.CreateQuestionWidgetForm(request.POST) - if form.is_valid(): - form.save() - return redirect('list_question_widgets') - else: - form = models.widgets.CreateQuestionWidgetForm() - - data = {'form': form} - return render_into_skin('embed/question_widget_form.html', data, request) - -@decorators.admins_only -def edit_question_widget(request, widget_id): - widget = get_object_or_404(models.QuestionWidget, pk=widget_id) - if request.method == 'POST': - form = models.widgets.CreateQuestionWidgetForm(request.POST, - instance=widget) - if form.is_valid(): - form.save() - return redirect('list_question_widgets') - else: - form = models.widgets.CreateAskWidgetForm(instance=widget) - - data = {'form': form} - return render_into_skin('embed/question_widget_form.html', data, request) - -@decorators.admins_only -def delete_question_widget(request, widget_id): - widget = get_object_or_404(models.QuestionWidget, pk=widget_id) - if request.method == "POST": - widget.delete() - return redirect('list_question_widgets') - else: - return render_into_skin('embed/delete_question_widget.html', - {'widget': widget}, request) |