summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2010-06-03 18:50:56 -0400
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2010-06-03 18:50:56 -0400
commite5ea67fd5ec4d15a217689faa216a01814f55748 (patch)
treece81c570147578cb831ef883d5ad9e779775e53c
parent02247d157b3da4d0711b8858bf758aefdf64c04d (diff)
downloadaskbot-e5ea67fd5ec4d15a217689faa216a01814f55748.tar.gz
askbot-e5ea67fd5ec4d15a217689faa216a01814f55748.tar.bz2
askbot-e5ea67fd5ec4d15a217689faa216a01814f55748.zip
created instant notification template and the formatting function
-rw-r--r--forum/conf/skin_general_settings.py3
-rw-r--r--forum/const/__init__.py24
-rw-r--r--forum/models/__init__.py112
-rw-r--r--forum/skins/__init__.py70
-rw-r--r--forum/skins/default/templates/instant_notification.html84
-rw-r--r--forum/skins/loaders.py59
-rw-r--r--forum/templatetags/extra_tags.py4
-rw-r--r--forum/utils/colors.py2
-rw-r--r--locale/en/LC_MESSAGES/django.po534
-rw-r--r--settings.py2
10 files changed, 476 insertions, 418 deletions
diff --git a/forum/conf/skin_general_settings.py b/forum/conf/skin_general_settings.py
index b1674d37..748510e7 100644
--- a/forum/conf/skin_general_settings.py
+++ b/forum/conf/skin_general_settings.py
@@ -4,6 +4,7 @@ General skin settings
from forum.conf.settings_wrapper import settings
from livesettings import ConfigurationGroup, StringValue, IntegerValue
from django.utils.translation import ugettext as _
+from forum.skins.utils import get_skin_choices
GENERAL_SKIN_SETTINGS = ConfigurationGroup(
'GENERAL_SKIN_SETTINGS',
@@ -15,7 +16,7 @@ settings.register(
GENERAL_SKIN_SETTINGS,
'ASKBOT_DEFAULT_SKIN',
default='default',
- choices=[('default','default')],#todo: get_skin_choices(),
+ choices=get_skin_choices(),
description=_('Select skin'),
)
)
diff --git a/forum/const/__init__.py b/forum/const/__init__.py
index e83c5a12..11a27ed9 100644
--- a/forum/const/__init__.py
+++ b/forum/const/__init__.py
@@ -127,6 +127,7 @@ TYPE_ACTIVITY = (
#response activity has receiving user not empty
RESPONSE_ACTIVITY_TYPES_FOR_DISPLAY = (
TYPE_ACTIVITY_ANSWER,
+ TYPE_ACTIVITY_ASK_QUESTION,
TYPE_ACTIVITY_COMMENT_QUESTION,
TYPE_ACTIVITY_COMMENT_ANSWER,
TYPE_ACTIVITY_UPDATE_ANSWER,
@@ -143,6 +144,29 @@ RESPONSE_ACTIVITY_TYPES_FOR_DISPLAY = (
TYPE_ACTIVITY_FAVORITE,
)
+RESPONSE_ACTIVITY_TYPES_FOR_INSTANT_NOTIFICATIONS = (
+ TYPE_ACTIVITY_COMMENT_QUESTION,
+ TYPE_ACTIVITY_COMMENT_ANSWER,
+ TYPE_ACTIVITY_UPDATE_ANSWER,
+ TYPE_ACTIVITY_UPDATE_QUESTION,
+ TYPE_ACTIVITY_ANSWER,
+ TYPE_ACTIVITY_ASK_QUESTION,
+)
+
+RESPONSE_ACTIVITY_TYPE_MAP_FOR_TEMPLATES = {
+ TYPE_ACTIVITY_COMMENT_QUESTION: 'question_comment',
+ TYPE_ACTIVITY_COMMENT_ANSWER: 'answer_comment',
+ TYPE_ACTIVITY_UPDATE_ANSWER: 'answer_update',
+ TYPE_ACTIVITY_UPDATE_QUESTION: 'question_update',
+ TYPE_ACTIVITY_ANSWER: 'new_answer',
+ TYPE_ACTIVITY_ASK_QUESTION: 'new_question',
+ }
+
+assert(
+ set(RESPONSE_ACTIVITY_TYPES_FOR_INSTANT_NOTIFICATIONS) \
+ == set(RESPONSE_ACTIVITY_TYPE_MAP_FOR_TEMPLATES.keys())
+)
+
TYPE_RESPONSE = {
'QUESTION_ANSWERED' : _('question_answered'),
'QUESTION_COMMENTED': _('question_commented'),
diff --git a/forum/models/__init__.py b/forum/models/__init__.py
index 2df44bcc..168399f9 100644
--- a/forum/models/__init__.py
+++ b/forum/models/__init__.py
@@ -15,6 +15,7 @@ from django.db import models
from django.conf import settings as django_settings
from django.contrib.contenttypes.models import ContentType
from forum import const
+from forum.conf import settings as forum_settings
from forum.models.question import Question, QuestionRevision
from forum.models.question import QuestionView, AnonymousQuestion
from forum.models.question import FavoriteQuestion
@@ -25,7 +26,6 @@ from forum.models.user import Activity, ValidationHash, EmailFeedSetting
from forum.models import signals
#from user import AuthKeyUserAssociation
from forum.models.repute import Badge, Award, Repute
-from forum.conf import settings as forum_settings
from forum import auth
User.add_to_class('is_approved', models.BooleanField(default=False))
@@ -225,7 +225,7 @@ def flag_post(user, post, timestamp=None, cancel=False):
def user_should_receive_instant_notification_about_post(
user,
- post,
+ post = None,
newly_mentioned_users = []
):
return EmailFeedSetting.objects.exists_match_to_post_and_subscriber(
@@ -252,22 +252,43 @@ User.add_to_class(
user_should_receive_instant_notification_about_post
)
-def format_instant_notification_body(template, data):
- """data has the following keys:
- receiving_user: User instance
- update_author: Uses instance
- updated_post: post = Question|Answer|Comment instance
- update_url: absolute url (including http...) of the post
- revision_number: latest revision number of the post
- update_type: type of update from the map in function below
- related_origin_post: another post related to the updated one, if any
- admin_email: email address of forum administrator
- email_settings_url: full url to the page where user can change email settings
+def format_instant_notification_body(
+ to_user = None,
+ from_user = None,
+ post = None,
+ update_type = None,
+ template = None,
+ ):
"""
- #todo: write this function so that
- #it can be easily used for testing of the email messages
- #separately using a script
- return template.render(Context(data))
+ returns text of the instant notification body
+ that is built when post is updated
+ only update_types in const.RESPONSE_ACTIVITY_TYPE_MAP_FOR_TEMPLATES
+ are supported
+ """
+
+ site_url = forum_settings.APP_URL
+ origin_post = post.get_origin_post()
+ user_subscriptions_url = site_url + to_user.get_absolute_url() + \
+ '?sort=email_subscriptions'
+
+ if update_type == 'question_comment':
+ assert(isinstance(post, Comment))
+ assert(isinstance(post.content_object, Question))
+ elif update_type == 'answer_comment':
+ assert(isinstance(post, Comment))
+ assert(isinstance(post.content_object, Answer))
+ elif update_type in ('answer_update', 'new_answer'):
+ assert(isinstance(post, Answer))
+ elif update_type in ('question_update', 'new_question'):
+ assert(isinstance(post, Question))
+
+ update_data = {
+ 'update_author_name': from_user.username,
+ 'post_url': site_url + post.get_absolute_url(),
+ 'origin_post_title': origin_post.title
+ 'user_subscriptions_url': user_subscriptions_url
+ }
+ return template.render(Context(update_data))
def send_instant_notifications_about_activity_in_post(
activity = None,
@@ -277,49 +298,40 @@ def send_instant_notifications_about_activity_in_post(
):
"""
function called when posts are updated
+ newly mentioned users are carried through to reduce
+ database hits
"""
- #todo: remove this after migrating to string type for const.TYPE_ACTIVITY...
- update_type_map = {
- const.TYPE_ACTIVITY_COMMENT_QUESTION: 'question_comment',
- const.TYPE_ACTIVITY_COMMENT_ANSWER: 'answer_comment',
- const.TYPE_ACTIVITY_UPDATE_ANSWER: 'answer_update',
- const.TYPE_ACTIVITY_UPDATE_QUESTION: 'question_update',
- }
+ update_type_map = const.RESPONSE_ACTIVITY_TYPE_MAP_FOR_TEMPLATES
+
+ if activity.activity_type in update_type_map:
+ update_type = update_type_map[activity.activity_type]
+ else:
+ return
template = loader.get_template('instant_notification.html')
- for u in set(receiving_users) | set(newly_mentioned_users):
- if u.should_receive_instant_notification_about_post(
- post,
+ for user in set(receiving_users) | set(newly_mentioned_users):
+
+ if user.should_receive_instant_notification_about_post(
+ post = post,
newly_mentioned_users = newly_mentioned_users
):
-
- #get details about update
- #todo: is there a way to solve this import issue?
- #from forum.conf import settings as forum_settings
- base_url = forum_settings.APP_URL
- data = {
- 'receiving_user': u,
- 'update_author': activity.user,
- 'updated_post': post,
- 'update_url': base_url + post.get_absolute_url(),
- 'update_type': update_type_map[activity.activity_type],
- 'revision_number': post.get_latest_revision_number(),
- 'related_origin_post': post.get_origin_post(),
- 'admin_email': django_settings.ADMINS[0][1],
- #todo: clean up url calculation below
- 'email_settings_url': base_url + u.get_profile_url() \
- + '?sort=email_subscriptions'
- }
#send update
subject = _('email update message subject')
text = format_instant_notification_body(
+ to_user = user,
+ from_user = activity.user,
+ post = post,
+ update_type = update_type,
+ template = template,
)
- msg = EmailMessage(subject, text, django_settings.DEFAULT_FROM_EMAIL, [u.email])
- print 'sending email to %s' % u.email
- print 'subject: %s' % subject
- print 'body: %s' % text
- #msg.send()
+ msg = EmailMessage(
+ subject,
+ text,
+ django_settings.DEFAULT_FROM_EMAIL,
+ [user.email]
+ )
+ msg.send()
def calculate_gravatar_hash(instance, **kwargs):
diff --git a/forum/skins/__init__.py b/forum/skins/__init__.py
index b7b222a2..e69de29b 100644
--- a/forum/skins/__init__.py
+++ b/forum/skins/__init__.py
@@ -1,70 +0,0 @@
-from django.template import loader
-from django.template.loaders import filesystem
-import os.path
-import os
-import logging
-from forum.conf import settings as forum_settings
-from forum.skins import utils
-
-#module for skinning askbot
-#via ASKBOT_DEFAULT_SKIN configureation variable (not django setting)
-
-#note - Django template loaders use method django.utils._os.safe_join
-#to work on unicode file paths
-#here it is ignored because it is assumed that we won't use unicode paths
-
-def load_template_source(name, dirs=None):
- print 'want template %s' % name
- try:
- #todo: move this to top after splitting out get_skin_dirs()
- print 'trying to import forum_settings'
- print 'imported!'
- tname = os.path.join(forum_settings.ASKBOT_DEFAULT_SKIN,'templates',name)
- print tname
- print 'success'
- return filesystem.load_template_source(tname,dirs)
- except:
- print 'failed'
- tname = os.path.join('default','templates',name)
- return filesystem.load_template_source(tname,dirs)
-load_template_source.is_usable = True
-
-def find_media_source(url):
- """returns url prefixed with the skin name
- of the first skin that contains the file
- directories are searched in this order:
- forum_settings.ASKBOT_DEFAULT_SKIN, then 'default', then 'commmon'
- if file is not found - returns None
- and logs an error message
- """
- print 'trying to get source dammit'
- while url[0] == '/': url = url[1:]
- d = os.path.dirname
- n = os.path.normpath
- j = os.path.join
- f = os.path.isfile
- #todo: handles case of multiple skin directories
- skins = utils.get_skin_dirs()[0]
- try:
- #todo: move this to top after splitting out get_skin_dirs()
- print 'looking for the media path'
- media = os.path.join(skins, forum_settings.ASKBOT_DEFAULT_SKIN, url)
- print 'out of dadata'
- assert(f(media))
- use_skin = forum_settings.ASKBOT_DEFAULT_SKIN
- except:
- print 'failed'
- try:
- media = j(skins, 'default', url)
- assert(f(media))
- use_skin = 'default'
- except:
- media = j(skins, 'common', url)
- try:
- assert(f(media))
- use_skin = 'common'
- except:
- logging.error('could not find media for %s' % url)
- use_skin = ''
- return None
- return use_skin + '/' + url
diff --git a/forum/skins/default/templates/instant_notification.html b/forum/skins/default/templates/instant_notification.html
index 856e6676..b860ab02 100644
--- a/forum/skins/default/templates/instant_notification.html
+++ b/forum/skins/default/templates/instant_notification.html
@@ -1,54 +1,44 @@
-{% comment %}
-Called from forum.models.__init__.maybe_send_instant_notifications()
-Template paramaters:
-
-receiving_user - User
-update_author - User
-updated_post - Comment|Answer|Question
-related_origin_post - origin post related to the update
-update_url - absolute url (including http://... to updated post
-update_type - question_comment|answer_comment|answer_update|question_update
-revision_number - integer (first revision is 1)
-admin_email - email of forum administrator
-email_settings_url - url of user's email settings
-{% endcomment %}
{% load i18n %}
{% load smart_if %}
-{% blocktrans with receiving_user.username as user_name %}Dear {{user_name}},{% endblocktrans %}
-{% if update_type == 'question_comment' or update_type == 'answer_comment' %}
-{% blocktrans with post_author.get_profile_link as author_link and related_origin_post.get_absolute_url as origin_post_url and related_origin_post.title as origin_post_title %}
-{{author_link}} has left a new <a href="{{update_url}}">comment</a>
-related to question <a href="{{origin_post_url}}">{{origin_post_title}}</a>
+{% blocktrans %}<p>Dear {{receiving_user_name}},</p>{% endblocktrans %}
+<p></p>
+ {% if update_type == 'question_comment' %}
+{% blocktrans %}
+<p>{{update_author_name}} left a <a href="%{{post_url}}">new comment</a>
+for question "{{origin_post_title}}"</p>
{% endblocktrans %}
-{% endif %}
-{% if update_type == 'answer_update' %}
-{% if revision_number == 1 %}
-{% blocktrans with post_author.get_profile_link as author_link and related_origin_post.get_absolute_url as origin_post_url and related_origin_post.title as origin_post_title %}
-{{author_link}} posted <a href="{{update_url}}">a new answer</a>
-to question <a href="{{origin_post_url}}">{{origin_post_title}}</a>
+ {% endif %}
+ {% if update_type == 'answer_comment' %}
+{% blocktrans %}
+<p>{{update_author_name}} left a <a href="{{post_url}}">new comment</a>
+ for an answer to question "{{origin_post_title}}"</p>
{% endblocktrans %}
-{% else %}
-{% blocktrans with post_author.get_profile_link as author_link and related_origin_post.get_absolute_url as origin_post_url and related_origin_post.title as origin_post_title %}
-{{author_link}} updated <a href="{{update_url}}">an answer</a>
-to question <a href="{{origin_post_url}}">{{origin_post_title}}</a>
+ {% endif %}
+ {% if update_type == 'new_answer' %}
+{% blocktrans %}
+<p>{{update_author_name}} answered a question
+<a href="{{post_url}}">{{origin_post_title}}</a></p>
{% endblocktrans %}
-{% endif %}
-{% endif %}
-{% if update_type == 'question_update' %}
-{% if revision_number == 1 %}
-{% blocktrans with post_author.get_profile_link as author_link and related_origin_post.get_absolute_url as origin_post_url and related_origin_post.title as origin_post_title %}
-{{author_link}} asked a new question <a href="{{origin_post_url}}">{{origin_post_title}}</a>
+ {% endif %}
+ {% if update_type == 'new_question' %}
+{% blocktrans %}
+<p>{{update_author_name}} asked a question
+<a href="{{post_url}}">{{origin_post_title}}</a></p>
{% endblocktrans %}
-{% else %}
-{% blocktrans with post_author.get_profile_link as author_link and related_origin_post.get_absolute_url as origin_post_url and related_origin_post.title as origin_post_title %}
-{{author_link}} updated the question <a href="{{origin_post_url}}">{{origin_post_title}}</a>
+ {%if update_type == 'answer_update' %}
+{% blocktrans %}
+<p>{{update_author_name}} updated an answer to the question
+<a href="{{post_url}}">{{origin_post_title}}</a></p>
{% endblocktrans %}
-{% endif %}
-{% endif %}
-
-{% trans "Please take a look." %}
-
-{% blocktrans %}Sincerely,
-Forum Administrator{% endblocktrans %}
-
-{% blocktrans %}go to {{email_settings_url}} to change frequency of email updates or {{admin_email}} administrator{% endblocktrans %}
+ {% if update_type == 'question_update' %}
+{% blocktrans %}
+<p>{{update_author_name}} updated a question
+<a href="{{post_url}}">{{origin_post_title}}</a></p>
+{% endblocktrans %}
+ {% endif %}
+<p></p>
+{% blocktrans %}
+<p>Please note - you can easily <a href="{{user_subscriptions_url}}">change</a>
+how often you receive these notifications.</p>
+{% endblocktrans %}
+{% trans "<p>Sincerely,<br/>Forum Administrator</p>" %}
diff --git a/forum/skins/loaders.py b/forum/skins/loaders.py
new file mode 100644
index 00000000..53d1e02d
--- /dev/null
+++ b/forum/skins/loaders.py
@@ -0,0 +1,59 @@
+from django.template import loader
+from django.template.loaders import filesystem
+import os.path
+import os
+import logging
+from forum.skins import utils
+from forum.conf import settings as forum_settings
+
+#module for skinning askbot
+#via ASKBOT_DEFAULT_SKIN configureation variable (not django setting)
+
+#note - Django template loaders use method django.utils._os.safe_join
+#to work on unicode file paths
+#here it is ignored because it is assumed that we won't use unicode paths
+
+def load_template_source(name, dirs=None):
+ try:
+ #todo: move this to top after splitting out get_skin_dirs()
+ tname = os.path.join(forum_settings.ASKBOT_DEFAULT_SKIN,'templates',name)
+ return filesystem.load_template_source(tname,dirs)
+ except:
+ tname = os.path.join('default','templates',name)
+ return filesystem.load_template_source(tname,dirs)
+load_template_source.is_usable = True
+
+def find_media_source(url):
+ """returns url prefixed with the skin name
+ of the first skin that contains the file
+ directories are searched in this order:
+ forum_settings.ASKBOT_DEFAULT_SKIN, then 'default', then 'commmon'
+ if file is not found - returns None
+ and logs an error message
+ """
+ while url[0] == '/': url = url[1:]
+ d = os.path.dirname
+ n = os.path.normpath
+ j = os.path.join
+ f = os.path.isfile
+ #todo: handles case of multiple skin directories
+ skins = utils.get_skin_dirs()[0]
+ try:
+ use_skin = forum_settings.ASKBOT_DEFAULT_SKIN
+ media = os.path.join(skins, use_skin, url)
+ assert(f(media))
+ except:
+ try:
+ media = j(skins, 'default', url)
+ assert(f(media))
+ use_skin = 'default'
+ except:
+ media = j(skins, 'common', url)
+ try:
+ assert(f(media))
+ use_skin = 'common'
+ except:
+ logging.error('could not find media for %s' % url)
+ use_skin = ''
+ return None
+ return use_skin + '/' + url
diff --git a/forum/templatetags/extra_tags.py b/forum/templatetags/extra_tags.py
index 972e8c9e..e82537fa 100644
--- a/forum/templatetags/extra_tags.py
+++ b/forum/templatetags/extra_tags.py
@@ -290,7 +290,7 @@ def get_latest_changed_timestamp():
@register.simple_tag
def media(url):
- url = skins.find_media_source(url)
+ url = skins.loaders.find_media_source(url)
if url:
url = '///' + settings.FORUM_SCRIPT_ALIAS + '/m/' + url
return os.path.normpath(url) + '?v=%d' \
@@ -374,7 +374,7 @@ class BlockMediaUrlNode(template.Node):
for item in self.items:
url += item.render(context)
- url = skins.find_media_source(url)
+ url = skins.loaders.find_media_source(url)
url = prefix + url
out = os.path.normpath(url) + '?v=%d' % forum_settings.MEDIA_RESOURCE_REVISION
return out.replace(' ','')
diff --git a/forum/utils/colors.py b/forum/utils/colors.py
index 8ef6f342..694cc3b0 100644
--- a/forum/utils/colors.py
+++ b/forum/utils/colors.py
@@ -13,7 +13,7 @@ def get_counter_colors(count, counter_max=10, empty_bg='white', empty_fg='black'
blend_factor = 0
else:
#todo deal with negative counts properly
- blend_factor = 1 - math.fabs(float(count)/float(max))
+ blend_factor = 1 - math.fabs(float(count)/float(counter_max))
max_fg_color = Color.NewFromHtml(max_fg)
fg = Color.NewFromHtml(min_fg).Blend(max_fg_color, blend_factor)
diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po
index 44fc1454..3bbc706b 100644
--- a/locale/en/LC_MESSAGES/django.po
+++ b/locale/en/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-23 17:31-0400\n"
+"POT-Creation-Date: 2010-06-03 18:48-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Evgeny Fadeev <evgeny.fadeev@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: django_authopenid/forms.py:72 django_authopenid/views.py:133
+#: django_authopenid/forms.py:72 django_authopenid/views.py:134
msgid "i-names are not supported"
msgstr ""
@@ -144,7 +144,7 @@ msgstr ""
msgid "openid/"
msgstr ""
-#: django_authopenid/urls.py:43 forum/urls.py:52 forum/urls.py:56
+#: django_authopenid/urls.py:43 forum/urls.py:113 forum/urls.py:120
msgid "delete/"
msgstr ""
@@ -156,405 +156,401 @@ msgstr ""
msgid "external-login/signup/"
msgstr ""
-#: django_authopenid/views.py:140
+#: django_authopenid/views.py:141
#, python-format
msgid "OpenID %(openid_url)s is invalid"
msgstr ""
-#: django_authopenid/views.py:615
+#: django_authopenid/views.py:616
msgid "Welcome email subject line"
msgstr "Welcome to the Q&A forum"
-#: django_authopenid/views.py:721
+#: django_authopenid/views.py:722
msgid "Password changed."
msgstr ""
-#: django_authopenid/views.py:733 django_authopenid/views.py:739
+#: django_authopenid/views.py:734 django_authopenid/views.py:740
#, python-format
msgid "your email needs to be validated see %(details_url)s"
msgstr ""
"Your email needs to be validated. Please see details <a "
"id='validate_email_alert' href='%(details_url)s'>here</a>."
-#: django_authopenid/views.py:760
+#: django_authopenid/views.py:761
msgid "Email verification subject line"
msgstr "Verification Email from Q&A forum"
-#: django_authopenid/views.py:851
+#: django_authopenid/views.py:852
msgid "your email was not changed"
msgstr ""
-#: django_authopenid/views.py:899 django_authopenid/views.py:1057
+#: django_authopenid/views.py:900 django_authopenid/views.py:1058
#, python-format
msgid "No OpenID %s found associated in our database"
msgstr ""
-#: django_authopenid/views.py:903 django_authopenid/views.py:1064
+#: django_authopenid/views.py:904 django_authopenid/views.py:1065
#, python-format
msgid "The OpenID %s isn't associated to current user logged in"
msgstr ""
-#: django_authopenid/views.py:911
+#: django_authopenid/views.py:912
msgid "Email Changed."
msgstr ""
-#: django_authopenid/views.py:989
+#: django_authopenid/views.py:990
msgid "This OpenID is already associated with another account."
msgstr ""
-#: django_authopenid/views.py:994
+#: django_authopenid/views.py:995
#, python-format
msgid "OpenID %s is now associated with your account."
msgstr ""
-#: django_authopenid/views.py:1067
+#: django_authopenid/views.py:1068
msgid "Account deleted."
msgstr ""
-#: django_authopenid/views.py:1119
+#: django_authopenid/views.py:1120
msgid "Request for new password"
msgstr ""
-#: django_authopenid/views.py:1133
+#: django_authopenid/views.py:1134
msgid "A new password and the activation link were sent to your email address."
msgstr ""
-#: django_authopenid/views.py:1165
+#: django_authopenid/views.py:1166
#, python-format
msgid ""
"Could not change password. Confirmation key '%s' is not "
"registered."
msgstr ""
-#: django_authopenid/views.py:1175
+#: django_authopenid/views.py:1176
msgid ""
"Can not change password. User don't exist anymore in our "
"database."
msgstr ""
-#: django_authopenid/views.py:1185
+#: django_authopenid/views.py:1186
#, python-format
msgid "Password changed for %s. You may now sign in."
msgstr ""
-#: forum/auth.py:470
+#: forum/auth.py:528
msgid "Your question and all of it's answers have been deleted"
msgstr ""
-#: forum/auth.py:472
+#: forum/auth.py:531
msgid "Your question has been deleted"
msgstr ""
-#: forum/auth.py:475
+#: forum/auth.py:535
msgid "The question and all of it's answers have been deleted"
msgstr ""
-#: forum/auth.py:477
+#: forum/auth.py:538
msgid "The question has been deleted"
msgstr ""
-#: forum/feed.py:18
+#: forum/feed.py:22
msgid " - "
msgstr ""
-#: forum/feed.py:18
+#: forum/feed.py:22
msgid "latest questions"
msgstr ""
-#: forum/forms.py:24 forum/skins/default/templates/answer_edit_tips.html:35
+#: forum/forms.py:23 forum/skins/default/templates/answer_edit_tips.html:35
#: forum/skins/default/templates/answer_edit_tips.html:39
#: forum/skins/default/templates/question_edit_tips.html:32
#: forum/skins/default/templates/question_edit_tips.html:37
msgid "title"
msgstr ""
-#: forum/forms.py:25
+#: forum/forms.py:24
msgid "please enter a descriptive title for your question"
msgstr ""
-#: forum/forms.py:30
+#: forum/forms.py:29
msgid "title must be > 10 characters"
msgstr ""
-#: forum/forms.py:39
+#: forum/forms.py:38
msgid "content"
msgstr ""
-#: forum/forms.py:45
+#: forum/forms.py:44
msgid "question content must be > 10 characters"
msgstr ""
-#: forum/forms.py:54 forum/skins/default/templates/header.html:28
+#: forum/forms.py:53 forum/skins/default/templates/header.html:28
msgid "tags"
msgstr ""
-#: forum/forms.py:56
+#: forum/forms.py:55
msgid ""
"Tags are short keywords, with no spaces within. Up to five tags can be used."
msgstr ""
-#: forum/forms.py:63 forum/skins/default/templates/question_retag.html:39
+#: forum/forms.py:62 forum/skins/default/templates/question_retag.html:39
msgid "tags are required"
msgstr ""
-#: forum/forms.py:72
+#: forum/forms.py:71
#, python-format
msgid "please use %(tag_count)d tag or less"
msgid_plural "please use %(tag_count)d tags or less"
msgstr[0] ""
msgstr[1] ""
-#: forum/forms.py:81
+#: forum/forms.py:80
#, python-format
msgid "each tag must be shorter than %(max_chars)d character"
msgid_plural "each tag must be shorter than %(max_chars)d characters"
msgstr[0] ""
msgstr[1] ""
-#: forum/forms.py:89
+#: forum/forms.py:88
msgid "use-these-chars-in-tags"
msgstr ""
-#: forum/forms.py:99
+#: forum/forms.py:98
#: forum/skins/default/templates/post_contributor_info.html:7
#: forum/skins/default/templates/question_summary_list_roll.html:26
#: forum/skins/default/templates/question_summary_list_roll.html:38
msgid "community wiki"
msgstr ""
-#: forum/forms.py:100
+#: forum/forms.py:99
msgid ""
"if you choose community wiki option, the question and answer do not generate "
"points and name of author will not be shown"
msgstr ""
-#: forum/forms.py:116
+#: forum/forms.py:115
msgid "update summary:"
msgstr ""
-#: forum/forms.py:117
+#: forum/forms.py:116
msgid ""
"enter a brief summary of your revision (e.g. fixed spelling, grammar, "
"improved style, this field is optional)"
msgstr ""
-#: forum/forms.py:120
+#: forum/forms.py:119
msgid "Automatically accept user's contributions for the email updates"
msgstr ""
-#: forum/forms.py:211
+#: forum/forms.py:210
msgid "Your name:"
msgstr ""
-#: forum/forms.py:212
+#: forum/forms.py:211
msgid "Email (not shared with anyone):"
msgstr ""
-#: forum/forms.py:213
+#: forum/forms.py:212
msgid "Your message:"
msgstr ""
-#: forum/forms.py:296
+#: forum/forms.py:295
msgid "this email does not have to be linked to gravatar"
msgstr ""
-#: forum/forms.py:298
+#: forum/forms.py:297
msgid "Screen name"
msgstr ""
-#: forum/forms.py:299
+#: forum/forms.py:298
msgid "Real name"
msgstr ""
-#: forum/forms.py:300
+#: forum/forms.py:299
msgid "Website"
msgstr ""
-#: forum/forms.py:301
+#: forum/forms.py:300
msgid "Location"
msgstr ""
-#: forum/forms.py:302
+#: forum/forms.py:301
msgid "Date of birth"
msgstr ""
-#: forum/forms.py:302
+#: forum/forms.py:301
msgid "will not be shown, used to calculate age, format: YYYY-MM-DD"
msgstr ""
-#: forum/forms.py:303 forum/skins/default/templates/account_settings.html:21
+#: forum/forms.py:302 forum/skins/default/templates/account_settings.html:21
#: forum/skins/default/templates/authopenid/settings.html:21
msgid "Profile"
msgstr ""
-#: forum/forms.py:334 forum/forms.py:335
+#: forum/forms.py:333 forum/forms.py:334
msgid "this email has already been registered, please use another one"
msgstr ""
-#: forum/forms.py:341
+#: forum/forms.py:340
msgid "Choose email tag filter"
msgstr ""
-#: forum/forms.py:380
+#: forum/forms.py:379
msgid "Asked by me"
msgstr ""
-#: forum/forms.py:383
+#: forum/forms.py:382
msgid "Answered by me"
msgstr ""
-#: forum/forms.py:386
+#: forum/forms.py:385
msgid "Individually selected"
msgstr ""
-#: forum/forms.py:389
+#: forum/forms.py:388
msgid "Entire forum (tag filtered)"
msgstr ""
-#: forum/forms.py:393
+#: forum/forms.py:392
msgid "Comments and posts mentioning me"
msgstr ""
-#: forum/forms.py:449
+#: forum/forms.py:450
msgid "okay, let's try!"
msgstr ""
-#: forum/forms.py:450
+#: forum/forms.py:451
msgid "no community email please, thanks"
msgstr "no askbot email please, thanks"
-#: forum/forms.py:454
+#: forum/forms.py:455
msgid "please choose one of the options above"
msgstr ""
-#: forum/urls.py:28
+#: forum/urls.py:37
msgid "upfiles/"
msgstr ""
-#: forum/urls.py:33
+#: forum/urls.py:42
msgid "about/"
msgstr ""
-#: forum/urls.py:34 forum/conf/site_settings.py:76
+#: forum/urls.py:43 forum/conf/site_settings.py:75
msgid "faq/"
msgstr ""
-#: forum/urls.py:35
+#: forum/urls.py:44
msgid "privacy/"
msgstr ""
-#: forum/urls.py:36
+#: forum/urls.py:45
msgid "logout/"
msgstr ""
-#: forum/urls.py:37 forum/urls.py:38 forum/urls.py:39 forum/urls.py:56
+#: forum/urls.py:47 forum/urls.py:52 forum/urls.py:57 forum/urls.py:120
msgid "answers/"
msgstr ""
-#: forum/urls.py:37 forum/urls.py:49 forum/urls.py:52 forum/urls.py:56
+#: forum/urls.py:47 forum/urls.py:102 forum/urls.py:113 forum/urls.py:120
msgid "comments/"
msgstr ""
-#: forum/urls.py:38 forum/urls.py:43 forum/urls.py:78
+#: forum/urls.py:52 forum/urls.py:72 forum/urls.py:166
#: forum/skins/default/templates/user_info.html:47
msgid "edit/"
msgstr ""
-#: forum/urls.py:39 forum/urls.py:48
+#: forum/urls.py:57 forum/urls.py:97
msgid "revisions/"
msgstr ""
-#: forum/urls.py:40 forum/urls.py:41 forum/urls.py:42 forum/urls.py:43
-#: forum/urls.py:44 forum/urls.py:45 forum/urls.py:46 forum/urls.py:47
-#: forum/urls.py:48 forum/urls.py:49 forum/urls.py:52
+#: forum/urls.py:62 forum/urls.py:67 forum/urls.py:72 forum/urls.py:77
+#: forum/urls.py:82 forum/urls.py:87 forum/urls.py:92 forum/urls.py:97
+#: forum/urls.py:102 forum/urls.py:113
msgid "questions/"
msgstr ""
-#: forum/urls.py:41 forum_modules/books/urls.py:8
+#: forum/urls.py:67 forum_modules/books/urls.py:8
msgid "ask/"
msgstr ""
-#: forum/urls.py:42
-msgid "unanswered/"
-msgstr ""
-
-#: forum/urls.py:44
+#: forum/urls.py:77
msgid "close/"
msgstr ""
-#: forum/urls.py:45
+#: forum/urls.py:82
msgid "reopen/"
msgstr ""
-#: forum/urls.py:46
+#: forum/urls.py:87
msgid "answer/"
msgstr ""
-#: forum/urls.py:47
+#: forum/urls.py:92
msgid "vote/"
msgstr ""
-#: forum/urls.py:50
+#: forum/urls.py:107
msgid "command/"
msgstr ""
-#: forum/urls.py:60 forum/views/readers.py:264
+#: forum/urls.py:127 forum/views/readers.py:256
msgid "question/"
msgstr ""
-#: forum/urls.py:61 forum/urls.py:62
+#: forum/urls.py:132
msgid "tags/"
msgstr ""
-#: forum/urls.py:64 forum/urls.py:68
+#: forum/urls.py:137 forum/urls.py:143
msgid "mark-tag/"
msgstr ""
-#: forum/urls.py:64
+#: forum/urls.py:137
msgid "interesting/"
msgstr ""
-#: forum/urls.py:68
+#: forum/urls.py:143
msgid "ignored/"
msgstr ""
-#: forum/urls.py:72
+#: forum/urls.py:149
msgid "unmark-tag/"
msgstr ""
-#: forum/urls.py:76 forum/urls.py:78 forum/urls.py:79
+#: forum/urls.py:155 forum/urls.py:166 forum/urls.py:171
msgid "users/"
msgstr ""
-#: forum/urls.py:77
+#: forum/urls.py:160
msgid "moderate-user/"
msgstr ""
-#: forum/urls.py:80 forum/urls.py:81
+#: forum/urls.py:176 forum/urls.py:181
msgid "badges/"
msgstr ""
-#: forum/urls.py:82
+#: forum/urls.py:186
msgid "messages/"
msgstr ""
-#: forum/urls.py:82
+#: forum/urls.py:186
msgid "markread/"
msgstr ""
-#: forum/urls.py:85
+#: forum/urls.py:197
msgid "upload/"
msgstr ""
-#: forum/urls.py:86
+#: forum/urls.py:198
msgid "search/"
msgstr ""
-#: forum/urls.py:87
+#: forum/urls.py:199
msgid "feedback/"
msgstr ""
-#: forum/urls.py:88 forum/urls.py:89
+#: forum/urls.py:200
msgid "account/"
msgstr ""
@@ -827,53 +823,53 @@ msgstr ""
msgid "Loss for post owner when upvote is canceled"
msgstr ""
-#: forum/conf/site_settings.py:14
+#: forum/conf/site_settings.py:13
msgid "Q&A forum website parameters and urls"
msgstr ""
-#: forum/conf/site_settings.py:22
+#: forum/conf/site_settings.py:21
msgid "Site title for the Q&A forum"
msgstr ""
-#: forum/conf/site_settings.py:31
+#: forum/conf/site_settings.py:30
msgid "Comma separated list of Q&A site keywords"
msgstr ""
-#: forum/conf/site_settings.py:40
+#: forum/conf/site_settings.py:39
msgid "Copyright message to show in the footer"
msgstr ""
-#: forum/conf/site_settings.py:49
+#: forum/conf/site_settings.py:48
msgid "Site description for the search engines"
msgstr ""
-#: forum/conf/site_settings.py:57
+#: forum/conf/site_settings.py:56
msgid "Askbot"
msgstr ""
-#: forum/conf/site_settings.py:59
+#: forum/conf/site_settings.py:58
msgid "Short name for your Q&A forum"
msgstr ""
-#: forum/conf/site_settings.py:68
+#: forum/conf/site_settings.py:67
msgid "Base URL for your Q&A forum, must start with http or https"
msgstr ""
-#: forum/conf/site_settings.py:78
+#: forum/conf/site_settings.py:77
msgid "Link shown in the greeting message shown to the anonymous user"
msgstr ""
-#: forum/conf/site_settings.py:79
+#: forum/conf/site_settings.py:78
msgid ""
"If you change this url from the default - then you will also probably want "
"to adjust translation of the following string: "
msgstr ""
-#: forum/conf/site_settings.py:92
+#: forum/conf/site_settings.py:91
msgid "Feedback site URL"
msgstr ""
-#: forum/conf/site_settings.py:93
+#: forum/conf/site_settings.py:92
msgid "If left empty, a simple internal feedback form will be used instead"
msgstr ""
@@ -1141,144 +1137,144 @@ msgstr ""
msgid "favorite"
msgstr ""
-#: forum/const/__init__.py:61
+#: forum/const/__init__.py:67
msgid "Question has no answers"
msgstr ""
-#: forum/const/__init__.py:62
+#: forum/const/__init__.py:68
msgid "Question has no accepted answers"
msgstr ""
-#: forum/const/__init__.py:100
+#: forum/const/__init__.py:106
msgid "question"
msgstr ""
-#: forum/const/__init__.py:101 forum/skins/default/templates/book.html:110
+#: forum/const/__init__.py:107 forum/skins/default/templates/book.html:110
msgid "answer"
msgstr ""
-#: forum/const/__init__.py:102
+#: forum/const/__init__.py:108
msgid "commented question"
msgstr ""
-#: forum/const/__init__.py:103
+#: forum/const/__init__.py:109
msgid "commented answer"
msgstr ""
-#: forum/const/__init__.py:104
+#: forum/const/__init__.py:110
msgid "edited question"
msgstr ""
-#: forum/const/__init__.py:105
+#: forum/const/__init__.py:111
msgid "edited answer"
msgstr ""
-#: forum/const/__init__.py:106
+#: forum/const/__init__.py:112
msgid "received award"
msgstr "received badge"
-#: forum/const/__init__.py:107
+#: forum/const/__init__.py:113
msgid "marked best answer"
msgstr ""
-#: forum/const/__init__.py:108
+#: forum/const/__init__.py:114
msgid "upvoted"
msgstr ""
-#: forum/const/__init__.py:109
+#: forum/const/__init__.py:115
msgid "downvoted"
msgstr ""
-#: forum/const/__init__.py:110
+#: forum/const/__init__.py:116
msgid "canceled vote"
msgstr ""
-#: forum/const/__init__.py:111
+#: forum/const/__init__.py:117
msgid "deleted question"
msgstr ""
-#: forum/const/__init__.py:112
+#: forum/const/__init__.py:118
msgid "deleted answer"
msgstr ""
-#: forum/const/__init__.py:113
+#: forum/const/__init__.py:119
msgid "marked offensive"
msgstr ""
-#: forum/const/__init__.py:114
+#: forum/const/__init__.py:120
msgid "updated tags"
msgstr ""
-#: forum/const/__init__.py:115
+#: forum/const/__init__.py:121
msgid "selected favorite"
msgstr ""
-#: forum/const/__init__.py:116
+#: forum/const/__init__.py:122
msgid "completed user profile"
msgstr ""
-#: forum/const/__init__.py:117
+#: forum/const/__init__.py:123
msgid "email update sent to user"
msgstr ""
-#: forum/const/__init__.py:118
+#: forum/const/__init__.py:124
msgid "mentioned in the post"
msgstr ""
-#: forum/const/__init__.py:148
+#: forum/const/__init__.py:171
msgid "question_answered"
msgstr "answered question"
-#: forum/const/__init__.py:149
+#: forum/const/__init__.py:172
msgid "question_commented"
msgstr "commented question"
-#: forum/const/__init__.py:150
+#: forum/const/__init__.py:173
msgid "answer_commented"
msgstr ""
-#: forum/const/__init__.py:151
+#: forum/const/__init__.py:174
msgid "answer_accepted"
msgstr ""
-#: forum/const/__init__.py:155
+#: forum/const/__init__.py:178
msgid "[closed]"
msgstr ""
-#: forum/const/__init__.py:156
+#: forum/const/__init__.py:179
msgid "[deleted]"
msgstr ""
-#: forum/const/__init__.py:157 forum/views/readers.py:395
-#: forum/views/readers.py:416
+#: forum/const/__init__.py:180 forum/views/readers.py:387
+#: forum/views/readers.py:408
msgid "initial version"
msgstr ""
-#: forum/const/__init__.py:158
+#: forum/const/__init__.py:181
msgid "retagged"
msgstr ""
-#: forum/const/__init__.py:163
+#: forum/const/__init__.py:186
msgid "exclude ignored tags"
msgstr ""
-#: forum/const/__init__.py:164
+#: forum/const/__init__.py:187
msgid "allow only selected tags"
msgstr ""
-#: forum/const/__init__.py:168
+#: forum/const/__init__.py:191
msgid "instantly"
msgstr ""
-#: forum/const/__init__.py:169
+#: forum/const/__init__.py:192
msgid "daily"
msgstr ""
-#: forum/const/__init__.py:170
+#: forum/const/__init__.py:193
msgid "weekly"
msgstr ""
-#: forum/const/__init__.py:171
+#: forum/const/__init__.py:194
msgid "no email"
msgstr ""
@@ -1291,11 +1287,12 @@ msgstr ""
msgid "Congratulations, you are now an Administrator"
msgstr ""
-#: forum/management/commands/send_email_alerts.py:379
+#: forum/management/commands/send_email_alerts.py:380
+#: forum/models/__init__.py:320
msgid "email update message subject"
msgstr "news from Q&A forum"
-#: forum/management/commands/send_email_alerts.py:381
+#: forum/management/commands/send_email_alerts.py:382
#, python-format
msgid "%(name)s, this is an update message header for %(num)d question"
msgid_plural "%(name)s, this is an update message header for %(num)d questions"
@@ -1306,42 +1303,42 @@ msgstr[1] ""
"<p>Dear %(name)s,</p><p>The following %(num)d questions have been updated on "
"the Q&A forum:</p>"
-#: forum/management/commands/send_email_alerts.py:398
+#: forum/management/commands/send_email_alerts.py:399
msgid "new question"
msgstr ""
-#: forum/management/commands/send_email_alerts.py:415
+#: forum/management/commands/send_email_alerts.py:416
msgid ""
"Please visit the forum and see what's new! Could you spread the word about "
"it - can somebody you know help answering those questions or benefit from "
"posting one?"
msgstr ""
-#: forum/management/commands/send_email_alerts.py:427
+#: forum/management/commands/send_email_alerts.py:428
msgid ""
"Your most frequent subscription setting is 'daily' on selected questions. If "
"you are receiving more than one email per dayplease tell about this issue to "
"the forum administrator."
msgstr ""
-#: forum/management/commands/send_email_alerts.py:433
+#: forum/management/commands/send_email_alerts.py:434
msgid ""
"Your most frequent subscription setting is 'weekly' if you are receiving "
"this email more than once a week please report this issue to the forum "
"administrator."
msgstr ""
-#: forum/management/commands/send_email_alerts.py:439
+#: forum/management/commands/send_email_alerts.py:440
msgid ""
"There is a chance that you may be receiving links seen before - due to a "
"technicality that will eventually go away. "
msgstr ""
-#: forum/management/commands/send_email_alerts.py:454
+#: forum/management/commands/send_email_alerts.py:455
#, python-format
msgid ""
-"go to %(link)s to change frequency of email updates or %(email)s "
-"administrator"
+"go to %(email_settings_link)s to change frequency of email updates or %"
+"(admin_email)s administrator"
msgstr ""
"<p>Please remember that you can always <a href='%(link)s'>adjust</a> "
"frequency of the email updates or turn them off entirely.<br/>If you believe "
@@ -1781,84 +1778,84 @@ msgstr ""
msgid "Created a tag used by 50 questions"
msgstr ""
-#: forum/models/question.py:517
+#: forum/models/question.py:531
#, python-format
msgid "%(author)s modified the question"
msgstr ""
-#: forum/models/question.py:521
+#: forum/models/question.py:535
#, python-format
msgid "%(people)s posted %(new_answer_count)s new answers"
msgstr ""
-#: forum/models/question.py:526
+#: forum/models/question.py:540
#, python-format
msgid "%(people)s commented the question"
msgstr ""
-#: forum/models/question.py:531
+#: forum/models/question.py:545
#, python-format
msgid "%(people)s commented answers"
msgstr ""
-#: forum/models/question.py:533
+#: forum/models/question.py:547
#, python-format
msgid "%(people)s commented an answer"
msgstr ""
-#: forum/models/repute.py:13 forum/skins/default/templates/badges.html:54
+#: forum/models/repute.py:16 forum/skins/default/templates/badges.html:54
msgid "gold"
msgstr ""
-#: forum/models/repute.py:14 forum/skins/default/templates/badges.html:62
+#: forum/models/repute.py:17 forum/skins/default/templates/badges.html:62
msgid "silver"
msgstr ""
-#: forum/models/repute.py:15 forum/skins/default/templates/badges.html:69
+#: forum/models/repute.py:18 forum/skins/default/templates/badges.html:69
msgid "bronze"
msgstr ""
-#: forum/models/tag.py:81
+#: forum/models/tag.py:84
msgid "interesting"
msgstr ""
-#: forum/models/tag.py:81
+#: forum/models/tag.py:84
msgid "ignored"
msgstr ""
-#: forum/models/user.py:217
+#: forum/models/user.py:212
msgid "Entire forum"
msgstr ""
-#: forum/models/user.py:218
+#: forum/models/user.py:213
msgid "Questions that I asked"
msgstr ""
-#: forum/models/user.py:219
+#: forum/models/user.py:214
msgid "Questions that I answered"
msgstr ""
-#: forum/models/user.py:220
+#: forum/models/user.py:215
msgid "Individually selected questions"
msgstr ""
-#: forum/models/user.py:221
+#: forum/models/user.py:216
msgid "Mentions and comment responses"
msgstr ""
-#: forum/models/user.py:224
+#: forum/models/user.py:219
msgid "Instantly"
msgstr ""
-#: forum/models/user.py:225
+#: forum/models/user.py:220
msgid "Daily"
msgstr ""
-#: forum/models/user.py:226
+#: forum/models/user.py:221
msgid "Weekly"
msgstr ""
-#: forum/models/user.py:227
+#: forum/models/user.py:222
msgid "No email"
msgstr ""
@@ -2696,7 +2693,7 @@ msgid "users"
msgstr "people"
#: forum/skins/default/templates/header.html:30
-#: forum/templatetags/extra_tags.py:178 forum/templatetags/extra_tags.py:207
+#: forum/templatetags/extra_tags.py:177 forum/templatetags/extra_tags.py:206
msgid "badges"
msgstr ""
@@ -2708,33 +2705,70 @@ msgstr ""
msgid "search"
msgstr ""
-#: forum/skins/default/templates/instant_notification.html:16
+#: forum/skins/default/templates/instant_notification.html:3
#, python-format
-msgid "Dear %(user_name)s,"
+msgid "<p>Dear %(receiving_user_name)s,</p>"
msgstr ""
-#: forum/skins/default/templates/instant_notification.html:20
+#: forum/skins/default/templates/instant_notification.html:6
#, python-format
msgid ""
"\n"
-"%(author_link)s has left you a <a href=\"%(update_url|safe)s\">comment</a>\n"
-"related to question <a href=\"%(origin_post_url|safe)s\">%(origin_post_title)"
-"s</a>\n"
+"<p>%(update_author_name)s left a <a href=\"%%(post_url)s\">new comment</a>\n"
+"for question \"%(origin_post_title)s\"</p>\n"
msgstr ""
-#: forum/skins/default/templates/instant_notification.html:27
+#: forum/skins/default/templates/instant_notification.html:12
#, python-format
msgid ""
"\n"
-"%(author_link)s has left a new <a href=\"%(update_url|safe)s\">comment</a>\n"
-"related to question <a href=\"%(origin_post_url|safe)s\">%(origin_post_title)"
-"s</a>\n"
+"<p>%(update_author_name)s left a <a href=\"%(post_url)s\">new comment</a>\n"
+" for an answer to question \"%(origin_post_title)s\"</p>\n"
msgstr ""
-#: forum/skins/default/templates/instant_notification.html:35
+#: forum/skins/default/templates/instant_notification.html:18
+#, python-format
msgid ""
"\n"
+"<p>%(update_author_name)s answered a question \n"
+"<a href=\"%(post_url)s\">%(origin_post_title)s</a></p>\n"
+msgstr ""
+
+#: forum/skins/default/templates/instant_notification.html:24
+#, python-format
+msgid ""
"\n"
+"<p>%(update_author_name)s asked a question \n"
+"<a href=\"%(post_url)s\">%(origin_post_title)s</a></p>\n"
+msgstr ""
+
+#: forum/skins/default/templates/instant_notification.html:29
+#, python-format
+msgid ""
+"\n"
+"<p>%(update_author_name)s updated an answer to the question\n"
+"<a href=\"%(post_url)s\">%(origin_post_title)s</a></p>\n"
+msgstr ""
+
+#: forum/skins/default/templates/instant_notification.html:34
+#, python-format
+msgid ""
+"\n"
+"<p>%(update_author_name)s updated a question \n"
+"<a href=\"%(post_url)s\">%(origin_post_title)s</a></p>\n"
+msgstr ""
+
+#: forum/skins/default/templates/instant_notification.html:40
+#, python-format
+msgid ""
+"\n"
+"<p>Please note - you can easily <a href=\"%(user_subscriptions_url)s"
+"\">change</a>\n"
+"how often you receive these notifications.</p>\n"
+msgstr ""
+
+#: forum/skins/default/templates/instant_notification.html:44
+msgid "<p>Sincerely,<br/>Forum Administrator</p>"
msgstr ""
#: forum/skins/default/templates/logout.html:6
@@ -3524,7 +3558,7 @@ msgid "change picture"
msgstr ""
#: forum/skins/default/templates/user_info.html:25
-#: forum/skins/default/templates/users.html:26 forum/views/users.py:948
+#: forum/skins/default/templates/users.html:26 forum/views/users.py:959
msgid "reputation"
msgstr "karma"
@@ -3658,19 +3692,19 @@ msgstr[1] ""
msgid "User profile"
msgstr ""
-#: forum/skins/default/templates/user_tabs.html:7 forum/views/users.py:922
+#: forum/skins/default/templates/user_tabs.html:7 forum/views/users.py:933
msgid "overview"
msgstr ""
-#: forum/skins/default/templates/user_tabs.html:9 forum/views/users.py:930
+#: forum/skins/default/templates/user_tabs.html:9 forum/views/users.py:941
msgid "recent activity"
msgstr ""
-#: forum/skins/default/templates/user_tabs.html:12 forum/views/users.py:940
+#: forum/skins/default/templates/user_tabs.html:12 forum/views/users.py:951
msgid "comments and answers to others questions"
msgstr ""
-#: forum/skins/default/templates/user_tabs.html:13 forum/views/users.py:939
+#: forum/skins/default/templates/user_tabs.html:13 forum/views/users.py:950
msgid "responses"
msgstr ""
@@ -3682,11 +3716,11 @@ msgstr "Graph of user karma"
msgid "reputation history"
msgstr "karma history"
-#: forum/skins/default/templates/user_tabs.html:20 forum/views/users.py:966
+#: forum/skins/default/templates/user_tabs.html:20 forum/views/users.py:977
msgid "user vote record"
msgstr ""
-#: forum/skins/default/templates/user_tabs.html:20 forum/views/users.py:965
+#: forum/skins/default/templates/user_tabs.html:20 forum/views/users.py:976
msgid "casted votes"
msgstr "votes"
@@ -3698,11 +3732,11 @@ msgstr ""
msgid "favorites"
msgstr ""
-#: forum/skins/default/templates/user_tabs.html:27 forum/views/users.py:975
+#: forum/skins/default/templates/user_tabs.html:27 forum/views/users.py:986
msgid "email subscription settings"
msgstr ""
-#: forum/skins/default/templates/user_tabs.html:28 forum/views/users.py:974
+#: forum/skins/default/templates/user_tabs.html:28 forum/views/users.py:985
msgid "email subscriptions"
msgstr "subscriptions"
@@ -4295,31 +4329,31 @@ msgstr ""
msgid "no items in counter"
msgstr "no"
-#: forum/templatetags/extra_tags.py:54
+#: forum/templatetags/extra_tags.py:53
#, python-format
msgid "%(username)s gravatar image"
msgstr ""
-#: forum/templatetags/extra_tags.py:179 forum/templatetags/extra_tags.py:206
+#: forum/templatetags/extra_tags.py:178 forum/templatetags/extra_tags.py:205
msgid "reputation points"
msgstr "karma"
-#: forum/templatetags/extra_tags.py:266
+#: forum/templatetags/extra_tags.py:265
msgid "2 days ago"
msgstr ""
-#: forum/templatetags/extra_tags.py:268
+#: forum/templatetags/extra_tags.py:267
msgid "yesterday"
msgstr ""
-#: forum/templatetags/extra_tags.py:270
+#: forum/templatetags/extra_tags.py:269
#, python-format
msgid "%(hr)d hour ago"
msgid_plural "%(hr)d hours ago"
msgstr[0] ""
msgstr[1] ""
-#: forum/templatetags/extra_tags.py:272
+#: forum/templatetags/extra_tags.py:271
#, python-format
msgid "%(min)d min ago"
msgid_plural "%(min)d mins ago"
@@ -4334,74 +4368,74 @@ msgstr ""
msgid "choose a username"
msgstr "Choose screen name"
-#: forum/utils/forms.py:51
+#: forum/utils/forms.py:52
msgid "user name is required"
msgstr ""
-#: forum/utils/forms.py:52
+#: forum/utils/forms.py:53
msgid "sorry, this name is taken, please choose another"
msgstr ""
-#: forum/utils/forms.py:53
+#: forum/utils/forms.py:54
msgid "sorry, this name is not allowed, please choose another"
msgstr ""
-#: forum/utils/forms.py:54
+#: forum/utils/forms.py:55
msgid "sorry, there is no user with this name"
msgstr ""
-#: forum/utils/forms.py:55
+#: forum/utils/forms.py:56
msgid "sorry, we have a serious error - user name is taken by several users"
msgstr ""
-#: forum/utils/forms.py:56
+#: forum/utils/forms.py:57
msgid "user name can only consist of letters, empty space and underscore"
msgstr ""
-#: forum/utils/forms.py:112
+#: forum/utils/forms.py:118
msgid "your email address"
msgstr "Your email <i>(never shared)</i>"
-#: forum/utils/forms.py:113
+#: forum/utils/forms.py:119
msgid "email address is required"
msgstr ""
-#: forum/utils/forms.py:114
+#: forum/utils/forms.py:120
msgid "please enter a valid email address"
msgstr ""
-#: forum/utils/forms.py:115
+#: forum/utils/forms.py:121
msgid "this email is already used by someone else, please choose another"
msgstr ""
-#: forum/utils/forms.py:143
+#: forum/utils/forms.py:149
msgid "choose password"
msgstr "Password"
-#: forum/utils/forms.py:144
+#: forum/utils/forms.py:150
msgid "password is required"
msgstr ""
-#: forum/utils/forms.py:147
+#: forum/utils/forms.py:153
msgid "retype password"
msgstr "Password <i>(please retype)</i>"
-#: forum/utils/forms.py:148
+#: forum/utils/forms.py:154
msgid "please, retype your password"
msgstr ""
-#: forum/utils/forms.py:149
+#: forum/utils/forms.py:155
msgid "sorry, entered passwords did not match, please try again"
msgstr ""
-#: forum/views/commands.py:217
+#: forum/views/commands.py:218
#, python-format
msgid "subscription saved, %(email)s needs validation, see %(details_url)s"
msgstr ""
"Your subscription is saved, but email address %(email)s needs to be "
"validated, please see <a href='%(details_url)s'>more details here</a>"
-#: forum/views/commands.py:225
+#: forum/views/commands.py:226
msgid "email update frequency has been set to daily"
msgstr ""
@@ -4417,76 +4451,76 @@ msgstr ""
msgid "We look forward to hearing your feedback! Please, give it next time :)"
msgstr ""
-#: forum/views/users.py:882 forum/views/users.py:886
+#: forum/views/users.py:893 forum/views/users.py:897
msgid "changes saved"
msgstr ""
-#: forum/views/users.py:892
+#: forum/views/users.py:903
msgid "email updates canceled"
msgstr ""
-#: forum/views/users.py:923
+#: forum/views/users.py:934
msgid "user profile"
msgstr ""
-#: forum/views/users.py:924
+#: forum/views/users.py:935
msgid "user profile overview"
msgstr ""
-#: forum/views/users.py:931
+#: forum/views/users.py:942
msgid "recent user activity"
msgstr ""
-#: forum/views/users.py:932
+#: forum/views/users.py:943
msgid "profile - recent activity"
msgstr ""
-#: forum/views/users.py:941
+#: forum/views/users.py:952
msgid "profile - responses"
msgstr ""
-#: forum/views/users.py:949
+#: forum/views/users.py:960
msgid "user reputation in the community"
msgstr "user karma"
-#: forum/views/users.py:950
+#: forum/views/users.py:961
msgid "profile - user reputation"
msgstr "Profile - User's Karma"
-#: forum/views/users.py:956
+#: forum/views/users.py:967
msgid "favorite questions"
msgstr ""
-#: forum/views/users.py:957
+#: forum/views/users.py:968
msgid "users favorite questions"
msgstr ""
-#: forum/views/users.py:958
+#: forum/views/users.py:969
msgid "profile - favorite questions"
msgstr ""
-#: forum/views/users.py:967
+#: forum/views/users.py:978
msgid "profile - votes"
msgstr ""
-#: forum/views/users.py:976
+#: forum/views/users.py:987
msgid "profile - email subscriptions"
msgstr ""
-#: forum/views/writers.py:69
+#: forum/views/writers.py:67
msgid "uploading images is limited to users with >60 reputation points"
msgstr "sorry, file uploading requires karma >60"
-#: forum/views/writers.py:71
+#: forum/views/writers.py:69
msgid "allowed file types are 'jpg', 'jpeg', 'gif', 'bmp', 'png', 'tiff'"
msgstr ""
-#: forum/views/writers.py:73
+#: forum/views/writers.py:71
#, python-format
msgid "maximum upload file size is %sK"
msgstr ""
-#: forum/views/writers.py:75
+#: forum/views/writers.py:73
#, python-format
msgid ""
"Error uploading file. Please contact the site administrator. Thank you. %s"
@@ -4644,6 +4678,21 @@ msgstr ""
msgid "Uncollapse all"
msgstr ""
+#, fuzzy
+#~ msgid "user_subscriptions_url"
+#~ msgstr "subscriptions"
+
+#, fuzzy
+#~ msgid ""
+#~ "go to %(email_settings_url)s to change frequency of email updates or %"
+#~ "(admin_email)s administrator"
+#~ msgstr ""
+#~ "<p>Please remember that you can always <a href='%(link)s'>adjust</a> "
+#~ "frequency of the email updates or turn them off entirely.<br/>If you "
+#~ "believe that this message was sent in an error, please email about it the "
+#~ "forum administrator at %(email)s.</p><p>Sincerely,</p><p>Your friendly "
+#~ "Q&A forum server.</p>"
+
#~ msgid "%(q_num)s question found"
#~ msgid_plural "%(q_num)s questions found"
#~ msgstr[0] "One question found"
@@ -4737,13 +4786,6 @@ msgstr ""
#~ msgstr "<a href='%(gravatar_faq_url)s'>gravatar</a>"
#~ msgid ""
-#~ "Sincerely,<br />\n"
-#~ " Forum Administrator"
-#~ msgstr ""
-#~ "Sincerely,\n"
-#~ "Q&A Forum Administrator"
-
-#~ msgid ""
#~ "\n"
#~ " have total %(q_num)s unanswered questions\n"
#~ " "
diff --git a/settings.py b/settings.py
index 1f78d0e6..ee820cd5 100644
--- a/settings.py
+++ b/settings.py
@@ -13,7 +13,7 @@ TEMPLATE_LOADERS = (
'django.template.loaders.app_directories.load_template_source',
#below is forum stuff for this tuple
- 'forum.skins.load_template_source',#forum stuff
+ 'forum.skins.loaders.load_template_source',#forum stuff
# 'django.template.loaders.eggs.load_template_source',
)