summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdolfo Fitoria <adolfo.fitoria@gmail.com>2013-05-02 10:01:52 -0600
committerAdolfo Fitoria <adolfo.fitoria@gmail.com>2013-05-02 10:01:52 -0600
commit55f05b9287a5f65bd5a2253b774e71c262d1f947 (patch)
treeafdd0284692c9bec43e31349052462cfed7a95d1
parent20ad12f13506435175ee55afa43181be55dfa93b (diff)
parent967ee98f404fc78eeb0428b9099d48ca44372670 (diff)
downloadaskbot-55f05b9287a5f65bd5a2253b774e71c262d1f947.tar.gz
askbot-55f05b9287a5f65bd5a2253b774e71c262d1f947.tar.bz2
askbot-55f05b9287a5f65bd5a2253b774e71c262d1f947.zip
Merge branch 'master' of github.com:ASKBOT/askbot-devel
-rw-r--r--askbot/conf/email.py9
-rw-r--r--askbot/conf/forum_data_rules.py9
-rw-r--r--askbot/deps/django_authopenid/forms.py27
-rw-r--r--askbot/deps/livesettings/values.py1
-rw-r--r--askbot/doc/source/changelog.rst1
-rw-r--r--askbot/forms.py21
-rw-r--r--askbot/media/js/post.js17
-rw-r--r--askbot/models/__init__.py4
-rw-r--r--askbot/models/signals.py3
-rw-r--r--askbot/setup_templates/urls.py2
-rw-r--r--askbot/templates/meta/bottom_scripts.html20
-rw-r--r--askbot/tests/email_alert_tests.py2
-rw-r--r--askbot/urls.py1
-rw-r--r--askbot/utils/forms.py24
-rw-r--r--askbot/views/writers.py14
15 files changed, 84 insertions, 71 deletions
diff --git a/askbot/conf/email.py b/askbot/conf/email.py
index 3847b18a..db1fc813 100644
--- a/askbot/conf/email.py
+++ b/askbot/conf/email.py
@@ -230,15 +230,6 @@ settings.register(
)
settings.register(
- livesettings.BooleanValue(
- EMAIL,
- 'EMAIL_UNIQUE',
- default=True,
- description=_('Allow only one account per email address')
- )
-)
-
-settings.register(
livesettings.StringValue(
EMAIL,
'ANONYMOUS_USER_EMAIL',
diff --git a/askbot/conf/forum_data_rules.py b/askbot/conf/forum_data_rules.py
index 421bbad7..8f2cf175 100644
--- a/askbot/conf/forum_data_rules.py
+++ b/askbot/conf/forum_data_rules.py
@@ -110,6 +110,15 @@ settings.register(
)
)
+settings.register(
+ livesettings.BooleanValue(
+ FORUM_DATA_RULES,
+ 'AUTO_FOLLOW_QUESTION_BY_OP',
+ default=True,
+ description=_('Auto-follow questions by the Author')
+ )
+)
+
QUESTION_BODY_EDITOR_MODE_CHOICES = (
('open', _('Fully open by default')),
('folded', _('Folded by default'))
diff --git a/askbot/deps/django_authopenid/forms.py b/askbot/deps/django_authopenid/forms.py
index 332496b5..4ce7242b 100644
--- a/askbot/deps/django_authopenid/forms.py
+++ b/askbot/deps/django_authopenid/forms.py
@@ -363,21 +363,18 @@ class ChangeEmailForm(forms.Form):
def clean_email(self):
""" check if email don't exist """
if 'email' in self.cleaned_data:
- if askbot_settings.EMAIL_UNIQUE == True:
- try:
- user = User.objects.get(email = self.cleaned_data['email'])
- if self.user and self.user == user:
- return self.cleaned_data['email']
- except User.DoesNotExist:
+ try:
+ user = User.objects.get(email = self.cleaned_data['email'])
+ if self.user and self.user == user:
return self.cleaned_data['email']
- except User.MultipleObjectsReturned:
- raise forms.ValidationError(u'There is already more than one \
- account registered with that e-mail address. Please try \
- another.')
- raise forms.ValidationError(u'This email is already registered \
- in our database. Please choose another.')
- else:
+ except User.DoesNotExist:
return self.cleaned_data['email']
+ except User.MultipleObjectsReturned:
+ raise forms.ValidationError(u'There is already more than one \
+ account registered with that e-mail address. Please try \
+ another.')
+ raise forms.ValidationError(u'This email is already registered \
+ in our database. Please choose another.')
class AccountRecoveryForm(forms.Form):
"""with this form user enters email address and
@@ -395,9 +392,9 @@ class AccountRecoveryForm(forms.Form):
if 'email' in self.cleaned_data:
email = self.cleaned_data['email']
try:
- user = User.objects.get(email__iexact=email)
+ user = User.objects.filter(email__iexact=email)[0]
self.cleaned_data['user'] = user
- except User.DoesNotExist:
+ except KeyError:
del self.cleaned_data['email']
message = _('Sorry, we don\'t have this email address in the database')
raise forms.ValidationError(message)
diff --git a/askbot/deps/livesettings/values.py b/askbot/deps/livesettings/values.py
index 0f30808a..4ed2fe0e 100644
--- a/askbot/deps/livesettings/values.py
+++ b/askbot/deps/livesettings/values.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
"""Taken and modified from the dbsettings project.
http://code.google.com/p/django-values/
diff --git a/askbot/doc/source/changelog.rst b/askbot/doc/source/changelog.rst
index 38153404..d842db0d 100644
--- a/askbot/doc/source/changelog.rst
+++ b/askbot/doc/source/changelog.rst
@@ -3,6 +3,7 @@ Changes in Askbot
Development version
-------------------
+* Added option to auto-follow questions by the question posters with default "on"
* Support for Django 1.5
* Auto-tweet option for questions and answers
* Added Chech and Croatian translations
diff --git a/askbot/forms.py b/askbot/forms.py
index 39a390be..1ef8cefa 100644
--- a/askbot/forms.py
+++ b/askbot/forms.py
@@ -1449,21 +1449,20 @@ class EditUserForm(forms.Form):
"""For security reason one unique email in database"""
if self.user.email != self.cleaned_data['email']:
#todo dry it, there is a similar thing in openidauth
- if askbot_settings.EMAIL_UNIQUE is True:
- if 'email' in self.cleaned_data:
- try:
- User.objects.get(email=self.cleaned_data['email'])
- except User.DoesNotExist:
- return self.cleaned_data['email']
- except User.MultipleObjectsReturned:
- raise forms.ValidationError(_(
- 'this email has already been registered, '
- 'please use another one')
- )
+ if 'email' in self.cleaned_data:
+ try:
+ User.objects.get(email=self.cleaned_data['email'])
+ except User.DoesNotExist:
+ return self.cleaned_data['email']
+ except User.MultipleObjectsReturned:
raise forms.ValidationError(_(
'this email has already been registered, '
'please use another one')
)
+ raise forms.ValidationError(_(
+ 'this email has already been registered, '
+ 'please use another one')
+ )
return self.cleaned_data['email']
diff --git a/askbot/media/js/post.js b/askbot/media/js/post.js
index 7b18e7f1..4a2fb0d6 100644
--- a/askbot/media/js/post.js
+++ b/askbot/media/js/post.js
@@ -2588,9 +2588,24 @@ FoldedEditor.prototype.getOpenHandler = function() {
return function() {
promptBox.hide();
editorBox.show();
- me.getElement().addClass('unfolded');
+ var element = me.getElement();
+ element.addClass('unfolded');
+
+ /* make the editor one shot - once it unfolds it's
+ * not accepting any events
+ */
+ element.unbind('click');
+ element.unbind('focus');
+
+ /* this function will open the editor
+ * and focus cursor on the editor
+ */
me.onAfterOpenHandler();
+ /* external trigger is a clickable target
+ * placed outside of the this._element
+ * that will cause the editor to unfold
+ */
if (externalTrigger) {
var label = me.makeElement('label');
label.html(externalTrigger.html());
diff --git a/askbot/models/__init__.py b/askbot/models/__init__.py
index cb6ccbef..a1a8f636 100644
--- a/askbot/models/__init__.py
+++ b/askbot/models/__init__.py
@@ -1734,6 +1734,10 @@ def user_post_question(
raise ValueError('question.author != self')
question.author = self # HACK: Some tests require that question.author IS exactly the same object as self-user (kind of identity map which Django doesn't provide),
# because they set some attributes for that instance and expect them to be changed also for question.author
+
+ if askbot_settings.AUTO_FOLLOW_QUESTION_BY_OP:
+ self.toggle_favorite_question(question)
+
return question
@auto_now_timestamp
diff --git a/askbot/models/signals.py b/askbot/models/signals.py
index 303db2a2..4104ec62 100644
--- a/askbot/models/signals.py
+++ b/askbot/models/signals.py
@@ -34,9 +34,6 @@ new_question_posted = django.dispatch.Signal(
answer_edited = django.dispatch.Signal(
providing_args=['answer', 'user', 'form_data']
)
-answer_before_editing = django.dispatch.Signal(
- providing_args=['answer', 'user', 'form']
-)
post_updated = django.dispatch.Signal(
providing_args=[
diff --git a/askbot/setup_templates/urls.py b/askbot/setup_templates/urls.py
index 4c76781b..21338a0a 100644
--- a/askbot/setup_templates/urls.py
+++ b/askbot/setup_templates/urls.py
@@ -25,7 +25,7 @@ else:
urlpatterns += patterns('',
(r'^admin/', include(admin.site.urls)),
#(r'^cache/', include('keyedcache.urls')), - broken views disable for now
- (r'^settings/', include('askbot.deps.livesettings.urls')),
+ #(r'^settings/', include('askbot.deps.livesettings.urls')),
(r'^followit/', include('followit.urls')),
(r'^tinymce/', include('tinymce.urls')),
(r'^robots.txt$', include('robots.urls')),
diff --git a/askbot/templates/meta/bottom_scripts.html b/askbot/templates/meta/bottom_scripts.html
index 7af1d50d..eec4256d 100644
--- a/askbot/templates/meta/bottom_scripts.html
+++ b/askbot/templates/meta/bottom_scripts.html
@@ -56,16 +56,6 @@
<script type='text/javascript' src="{{"/js/jquery.history.js"|media }}"></script>
<script type='text/javascript' src="{{"/js/utils.js"|media }}"></script>
<script type="text/javascript" src="{{'/js/live_search.js'|media}}"></script>
-{% if settings.ENABLE_MATHJAX %}
- {# we don't want to load mathjax just in case, only if it is really enabled #}
- <script type='text/javascript' src="{{settings.MATHJAX_BASE_URL}}/MathJax.js">
- MathJax.Hub.Config({
- extensions: ["tex2jax.js"],
- jax: ["input/TeX","output/HTML-CSS"],
- tex2jax: {inlineMath: [["$","$"],["\\(","\\)"]]}
- });
- </script>
-{% endif %}
<script type="text/javascript">
/*<![CDATA[*/
$('.mceStatusbar').remove();//a hack to remove the tinyMCE status bar
@@ -121,6 +111,16 @@
</script>
{% endcompress %}
{# stuff below should not be compressed #}
+{% if settings.ENABLE_MATHJAX %}
+ {# we don't want to load mathjax just in case, only if it is really enabled #}
+ <script type='text/javascript' src="{{settings.MATHJAX_BASE_URL}}/MathJax.js">
+ MathJax.Hub.Config({
+ extensions: ["tex2jax.js"],
+ jax: ["input/TeX","output/HTML-CSS"],
+ tex2jax: {inlineMath: [["$","$"],["\\(","\\)"]]}
+ });
+ </script>
+{% endif %}
{% if settings.USE_CUSTOM_JS %}
<script
src="{% url "custom_js" %}?v={{ settings.MEDIA_RESOURCE_REVISION }}"
diff --git a/askbot/tests/email_alert_tests.py b/askbot/tests/email_alert_tests.py
index c9fe4b99..199fd12d 100644
--- a/askbot/tests/email_alert_tests.py
+++ b/askbot/tests/email_alert_tests.py
@@ -1071,7 +1071,7 @@ class PostApprovalTests(utils.AskbotTestCase):
u2.approve_post_revision(question.get_latest_revision())
outbox = django.core.mail.outbox
- self.assertEquals(len(outbox), 1)
+ self.assertEquals(len(outbox), 2)
#moderation notification
self.assertEquals(outbox[0].recipients(), [u1.email,])
#self.assertEquals(outbox[1].recipients(), [u1.email,])#approval
diff --git a/askbot/urls.py b/askbot/urls.py
index d3426980..32867615 100644
--- a/askbot/urls.py
+++ b/askbot/urls.py
@@ -563,6 +563,7 @@ urlpatterns = patterns('',
name = 'askbot_jsi18n'
),
url('^messages/', include('group_messaging.urls')),
+ url('^settings/', include('livesettings.urls')),
)
#todo - this url below won't work, because it is defined above
diff --git a/askbot/utils/forms.py b/askbot/utils/forms.py
index 4dfc8b4f..c799ff56 100644
--- a/askbot/utils/forms.py
+++ b/askbot/utils/forms.py
@@ -247,19 +247,17 @@ class UserEmailField(forms.EmailField):
allowed_email_domains=allowed_domains
):
raise forms.ValidationError(self.error_messages['unauthorized'])
- if askbot_settings.EMAIL_UNIQUE == True:
- try:
- user = User.objects.get(email = email)
- logging.debug('email taken')
- raise forms.ValidationError(self.error_messages['taken'])
- except User.DoesNotExist:
- logging.debug('email valid')
- return email
- except User.MultipleObjectsReturned:
- logging.debug('email taken many times over')
- raise forms.ValidationError(self.error_messages['taken'])
- else:
- return email
+
+ try:
+ user = User.objects.get(email__iexact=email)
+ logging.debug('email taken')
+ raise forms.ValidationError(self.error_messages['taken'])
+ except User.DoesNotExist:
+ logging.debug('email valid')
+ return email
+ except User.MultipleObjectsReturned:
+ logging.critical('email taken many times over')
+ raise forms.ValidationError(self.error_messages['taken'])
class SetPasswordForm(forms.Form):
password1 = forms.CharField(widget=forms.PasswordInput(attrs=login_form_widget_attrs),
diff --git a/askbot/views/writers.py b/askbot/views/writers.py
index bec059ef..fb1742f6 100644
--- a/askbot/views/writers.py
+++ b/askbot/views/writers.py
@@ -551,13 +551,6 @@ def edit_answer(request, id):
if request.user.can_make_group_private_posts():
form.initial['post_privately'] = answer.is_private()
- #gives a chance to set extra initial data on the form
- signals.answer_before_editing.send(None,
- answer=answer,
- user=request.user,
- form=form
- )
-
data = {
'page_class': 'edit-answer-page',
'active_tab': 'questions',
@@ -566,6 +559,13 @@ def edit_answer(request, id):
'revision_form': revision_form,
'form': form,
}
+ extra_context = context.get_extra(
+ 'ASKBOT_EDIT_ANSWER_PAGE_EXTRA_CONTEXT',
+ request,
+ data
+ )
+ data.update(extra_context)
+
return render(request, 'answer_edit.html', data)
except exceptions.PermissionDenied, e: