summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--askbot/forms.py3
-rw-r--r--askbot/models/__init__.py2
-rw-r--r--askbot/models/widgets.py26
-rw-r--r--askbot/skins/default/templates/embed/ask_by_widget.html (renamed from askbot/skins/default/templates/ask_by_widget.html)0
-rw-r--r--askbot/skins/default/templates/embed/ask_widget_complete.html (renamed from askbot/skins/default/templates/ask_widget_complete.html)0
-rw-r--r--askbot/skins/default/templates/embed/ask_widget_form.html (renamed from askbot/skins/default/templates/ask_widget_form.html)0
-rw-r--r--askbot/skins/default/templates/embed/delete_ask_widget.html (renamed from askbot/skins/default/templates/delete_ask_widget.html)0
-rw-r--r--askbot/skins/default/templates/embed/delete_question_widget.html13
-rw-r--r--askbot/skins/default/templates/embed/list_ask_widget.html (renamed from askbot/skins/default/templates/list_ask_widget.html)0
-rw-r--r--askbot/skins/default/templates/embed/question_widget.html (renamed from askbot/skins/default/templates/question_widget.html)0
-rw-r--r--askbot/skins/default/templates/embed/widgets.html (renamed from askbot/skins/default/templates/widgets.html)0
-rw-r--r--askbot/urls.py26
-rw-r--r--askbot/views/widgets.py76
13 files changed, 125 insertions, 21 deletions
diff --git a/askbot/forms.py b/askbot/forms.py
index 5662661a..57b14550 100644
--- a/askbot/forms.py
+++ b/askbot/forms.py
@@ -351,7 +351,8 @@ class TagNamesField(forms.CharField):
def __init__(self, *args, **kwargs):
super(TagNamesField, self).__init__(*args, **kwargs)
- self.required = askbot_settings.TAGS_ARE_REQUIRED
+ self.required = kwargs.get('required',
+ askbot_settings.TAGS_ARE_REQUIRED)
self.widget = forms.TextInput(
attrs={'size': 50, 'autocomplete': 'off'}
)
diff --git a/askbot/models/__init__.py b/askbot/models/__init__.py
index 90d8df14..ecbd64e5 100644
--- a/askbot/models/__init__.py
+++ b/askbot/models/__init__.py
@@ -45,7 +45,7 @@ from askbot.models.reply_by_email import ReplyAddress
from askbot.models import signals
from askbot.models.badges import award_badges_signal, get_badge, BadgeData
from askbot.models.repute import Award, Repute, Vote
-from askbot.models.widgets import AskWidget
+from askbot.models.widgets import AskWidget, QuestionWidget
from askbot import auth
from askbot.utils.decorators import auto_now_timestamp
from askbot.utils.slug import slugify
diff --git a/askbot/models/widgets.py b/askbot/models/widgets.py
index 3303eca7..e7c4bfab 100644
--- a/askbot/models/widgets.py
+++ b/askbot/models/widgets.py
@@ -4,7 +4,7 @@ from django.utils.translation import ugettext as _
from askbot.conf import settings as askbot_settings
from askbot.models import Tag
from askbot.models.tag import get_groups
-from askbot.forms import FormWithHideableFields
+from askbot.forms import FormWithHideableFields, TagNamesField
from askbot.conf import settings as askbot_settings
from django import forms
@@ -30,6 +30,19 @@ class AskWidget(models.Model):
def __unicode__(self):
return "Widget: %s" % self.title
+class QuestionWidget(models.Model):
+ title = models.CharField(max_length=100)
+ question_number = models.PositiveIntegerField(default=7)
+ tagnames = models.CharField('tags', max_length=50)
+ group = models.ForeignKey(Tag, null=True, blank=True)
+ search_query = models.CharField(max_length=50)
+ style = models.TextField('css for the widget',
+ default=DEFAULT_INNER_STYLE, blank=True)
+
+ class Meta:
+ app_label = 'askbot'
+
+#FORMS
class CreateAskWidgetForm(forms.ModelForm, FormWithHideableFields):
inner_style = forms.CharField(
widget=forms.Textarea,
@@ -54,3 +67,14 @@ class CreateAskWidgetForm(forms.ModelForm, FormWithHideableFields):
class Meta:
model = AskWidget
+
+class CreateQuestionWidgetForm(forms.ModelForm, FormWithHideableFields):
+ tagnames = TagNamesField()
+
+ #def __init__(self, *args, **kwargs):
+ # super(CreateQuestionWidgetForm, self).__init__(*args, **kwargs)
+ # if not askbot_settings.GROUPS_ENABLED:
+ # self.hide_field('group')
+
+ class Meta:
+ model = QuestionWidget
diff --git a/askbot/skins/default/templates/ask_by_widget.html b/askbot/skins/default/templates/embed/ask_by_widget.html
index f5c2a0a2..f5c2a0a2 100644
--- a/askbot/skins/default/templates/ask_by_widget.html
+++ b/askbot/skins/default/templates/embed/ask_by_widget.html
diff --git a/askbot/skins/default/templates/ask_widget_complete.html b/askbot/skins/default/templates/embed/ask_widget_complete.html
index 580c1f94..580c1f94 100644
--- a/askbot/skins/default/templates/ask_widget_complete.html
+++ b/askbot/skins/default/templates/embed/ask_widget_complete.html
diff --git a/askbot/skins/default/templates/ask_widget_form.html b/askbot/skins/default/templates/embed/ask_widget_form.html
index e082b175..e082b175 100644
--- a/askbot/skins/default/templates/ask_widget_form.html
+++ b/askbot/skins/default/templates/embed/ask_widget_form.html
diff --git a/askbot/skins/default/templates/delete_ask_widget.html b/askbot/skins/default/templates/embed/delete_ask_widget.html
index 17f48b8c..17f48b8c 100644
--- a/askbot/skins/default/templates/delete_ask_widget.html
+++ b/askbot/skins/default/templates/embed/delete_ask_widget.html
diff --git a/askbot/skins/default/templates/embed/delete_question_widget.html b/askbot/skins/default/templates/embed/delete_question_widget.html
new file mode 100644
index 00000000..52783e9d
--- /dev/null
+++ b/askbot/skins/default/templates/embed/delete_question_widget.html
@@ -0,0 +1,13 @@
+{% 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/list_ask_widget.html b/askbot/skins/default/templates/embed/list_ask_widget.html
index 27b8a20a..27b8a20a 100644
--- a/askbot/skins/default/templates/list_ask_widget.html
+++ b/askbot/skins/default/templates/embed/list_ask_widget.html
diff --git a/askbot/skins/default/templates/question_widget.html b/askbot/skins/default/templates/embed/question_widget.html
index 9d32294b..9d32294b 100644
--- a/askbot/skins/default/templates/question_widget.html
+++ b/askbot/skins/default/templates/embed/question_widget.html
diff --git a/askbot/skins/default/templates/widgets.html b/askbot/skins/default/templates/embed/widgets.html
index 4c7a633e..4c7a633e 100644
--- a/askbot/skins/default/templates/widgets.html
+++ b/askbot/skins/default/templates/embed/widgets.html
diff --git a/askbot/urls.py b/askbot/urls.py
index a614c84d..287403b4 100644
--- a/askbot/urls.py
+++ b/askbot/urls.py
@@ -424,10 +424,30 @@ urlpatterns = patterns('',
views.widgets.list_ask_widget,
name = 'list_ask_widgets'
),
+ #url(
+ # r'^%s%s$' % (_('widgets/'), _('questions/')),
+ # views.widgets.widget_questions,
+ # name='widget_questions'
+ #),
url(
- r'^%s%s$' % (_('widgets/'), _('questions/')),
- views.widgets.widget_questions,
- name='widget_questions'
+ 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'^feeds/(?P<url>.*)/$',
diff --git a/askbot/views/widgets.py b/askbot/views/widgets.py
index 5710a179..3d63e056 100644
--- a/askbot/views/widgets.py
+++ b/askbot/views/widgets.py
@@ -22,7 +22,7 @@ def widgets(request):
'ask_widgets': models.AskWidget.objects.all(),
'page_class': 'widgets'
}
- return render_into_skin('widgets.html', data, request)
+ return render_into_skin('embed/widgets.html', data, request)
@csrf.csrf_protect
def ask_widget(request, widget_id):
@@ -92,7 +92,7 @@ def ask_widget(request, widget_id):
form = forms.AskWidgetForm(include_text=widget.include_text_field)
data = {'form': form, 'widget': widget}
- return render_into_skin('ask_by_widget.html', data, request)
+ return render_into_skin('embed/ask_by_widget.html', data, request)
@login_required
def ask_widget_complete(request):
@@ -107,14 +107,14 @@ def ask_widget_complete(request):
del request.session['widget_css']
data = {'question_url': question_url, 'custom_css': custom_css}
- return render_into_skin('ask_widget_complete.html', data, request)
+ return render_into_skin('embed/ask_widget_complete.html', data, request)
@decorators.admins_only
def list_ask_widget(request):
widgets = models.AskWidget.objects.all()
data = {'widgets': widgets}
- return render_into_skin('list_ask_widget.html', data, request)
+ return render_into_skin('embed/list_ask_widget.html', data, request)
@decorators.admins_only
def create_ask_widget(request):
@@ -127,7 +127,7 @@ def create_ask_widget(request):
form = models.widgets.CreateAskWidgetForm()
data = {'form': form}
- return render_into_skin('ask_widget_form.html', data, request)
+ return render_into_skin('embed/ask_widget_form.html', data, request)
@decorators.admins_only
def edit_ask_widget(request, widget_id):
@@ -142,7 +142,7 @@ def edit_ask_widget(request, widget_id):
form = models.widgets.CreateAskWidgetForm(instance=widget)
data = {'form': form}
- return render_into_skin('ask_widget_form.html', data, request)
+ return render_into_skin('embed/ask_widget_form.html', data, request)
@decorators.admins_only
def delete_ask_widget(request, widget_id):
@@ -151,14 +151,14 @@ def delete_ask_widget(request, widget_id):
widget.delete()
return redirect('list_ask_widgets')
else:
- return render_into_skin('delete_ask_widget.html',
+ return render_into_skin('embed/delete_ask_widget.html',
{'widget': widget}, request)
#TODO: Add cache
def render_ask_widget_js(request, widget_id):
widget = get_object_or_404(models.AskWidget, pk=widget_id)
variable_name = "AskbotAskWidget%d" % widget.id
- content_tpl = get_template('widgets/askbot_widget.js', request)
+ content_tpl = get_template('embed/askbot_widget.js', request)
context_dict = {'widget': widget,
'host': request.get_host(),
'variable_name': variable_name}
@@ -169,7 +169,7 @@ def render_ask_widget_js(request, widget_id):
def render_ask_widget_css(request, widget_id):
widget = get_object_or_404(models.AskWidget, pk=widget_id)
variable_name = "AskbotAskWidget%d" % widget.id
- content_tpl = get_template('widgets/askbot_widget.css', request)
+ content_tpl = get_template('embed/askbot_widget.css', request)
context_dict = {'widget': widget,
'host': request.get_host(),
'variable_name': variable_name}
@@ -183,12 +183,58 @@ def widget_questions(request):
# make sure this is a GET request with the correct parameters.
if request.method != 'GET':
raise Http404
- threads = models.Thread.objects.all()
+
tags_input = request.GET.get('tags','').strip()
if len(tags_input) > 0:
tags = [tag.strip() for tag in tags_input.split(',')]
- threads = threads.filter(tags__name__in=tags)
- data = {
- 'threads': threads[:askbot_settings.QUESTIONS_WIDGET_MAX_QUESTIONS]
- }
- return render_into_skin('question_widget.html', data, request)
+ threads = models.Thread.objects.filter(tags__name__in=tags)[:askbot_settings.QUESTIONS_WIDGET_MAX_QUESTIONS]
+
+ else:
+ threads = models.Thread.objects.all()[:askbot_settings.QUESTIONS_WIDGET_MAX_QUESTIONS]
+
+ 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)