summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdolfo Fitoria <adolfo.fitoria@gmail.com>2012-08-17 19:35:36 -0600
committerAdolfo Fitoria <adolfo.fitoria@gmail.com>2012-08-18 20:33:39 -0600
commitb7a8b04ecc1b0e7636b9647496591e06edf195d6 (patch)
tree49940c962cb8c451a346eb8ee20cdce516d89223
parentbd1e4e99d8048d42e1781ea71ec7b348ff0358e8 (diff)
downloadaskbot-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.py2
-rw-r--r--askbot/skins/default/templates/embed/delete_question_widget.html13
-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.html15
-rw-r--r--askbot/tests/widget_tests.py28
-rw-r--r--askbot/urls.py59
-rw-r--r--askbot/views/widgets.py131
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> &lt;script type="text/javascript" src="http://{{request.get_host()}}{% url render_ask_widget widget.id%}" &gt;&lt;/script&gt;</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)