diff options
author | Adolfo Fitoria <adolfo.fitoria@gmail.com> | 2013-05-02 10:01:52 -0600 |
---|---|---|
committer | Adolfo Fitoria <adolfo.fitoria@gmail.com> | 2013-05-02 10:01:52 -0600 |
commit | 55f05b9287a5f65bd5a2253b774e71c262d1f947 (patch) | |
tree | afdd0284692c9bec43e31349052462cfed7a95d1 | |
parent | 20ad12f13506435175ee55afa43181be55dfa93b (diff) | |
parent | 967ee98f404fc78eeb0428b9099d48ca44372670 (diff) | |
download | askbot-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.py | 9 | ||||
-rw-r--r-- | askbot/conf/forum_data_rules.py | 9 | ||||
-rw-r--r-- | askbot/deps/django_authopenid/forms.py | 27 | ||||
-rw-r--r-- | askbot/deps/livesettings/values.py | 1 | ||||
-rw-r--r-- | askbot/doc/source/changelog.rst | 1 | ||||
-rw-r--r-- | askbot/forms.py | 21 | ||||
-rw-r--r-- | askbot/media/js/post.js | 17 | ||||
-rw-r--r-- | askbot/models/__init__.py | 4 | ||||
-rw-r--r-- | askbot/models/signals.py | 3 | ||||
-rw-r--r-- | askbot/setup_templates/urls.py | 2 | ||||
-rw-r--r-- | askbot/templates/meta/bottom_scripts.html | 20 | ||||
-rw-r--r-- | askbot/tests/email_alert_tests.py | 2 | ||||
-rw-r--r-- | askbot/urls.py | 1 | ||||
-rw-r--r-- | askbot/utils/forms.py | 24 | ||||
-rw-r--r-- | askbot/views/writers.py | 14 |
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: |