background: url("../images/comment-edit-hover.png") no-repeat scroll center center transparent;
}
+img.subscription-remove {
+ float:right;
+}
+
.comment-form-container {
display: none;
padding-top: 12px;
height: 14px;
display: inline-block;
}
+
+div#subscription_list {
+ width: 500px;
+ float:left;
+}
+
+div.subscription_summary {
+ border-top: 2px dotted #CCCCCE;
+ overflow: hidden;
+ padding: 3px 0px 5px 0;
+ position: relative;
+ width:100%;
+ margin-bottom:30px;
+}
+
+div.subscription_title {
+ float:left;
+
+ width:350px;
+
+ line-height:30px;
+
+ font-size: 25px;
+ font-weight:bold;
+ font-family: Arial;
+}
+
+a.subscription_unsubscribe_button {
+ float:left;
+ font-size: 15px;
+ font-weight:bold;
+
+ margin-right:15px;
+ margin-top:5px;
+}
+
+div.subscription_userinfo {
+ float:right;
+}
+
+div.subscription_tags {
+ font-family: sans-serif;
+ float:left;
+}
+div.subscription_tags a, span.tag {
+ background-color: #EEEEEE;
+ border-bottom: 1px solid #CCCCCC;
+ border-right: 1px solid #CCCCCC;
+ color: #777777;
+ font-size: 11px;
+ font-weight: normal;
+ padding: 1px 8px;
+ text-decoration: none;
+ white-space: nowrap;
+}
+div.subscription_tags a:hover {
+ background-color: #356FCB;
+ color: #FFFFFF;
+}
+
--- /dev/null
+
+
+
+{% load i18n humanize extra_filters extra_tags user_tags %}
+<div class="subscription_summary">
+ <div style="height:100%"><a class="sidebar_button subscription_unsubscribe_button" href="{% url subscribe id=question.id %}">
+ {% trans "Unsubscribe" %}
+ </a></div>
+
+ <div class="subscription_title"><a title="{{ question.summary }}" href="{{ question.get_absolute_url }}">{{question.headline}}</a></div>
+</div>
\ No newline at end of file
-{% extends "user.html" %}\r
-<!-- user_subscriptions.html -->\r
-{% load i18n %}\r
-{% load extra_tags %}\r
-{% load humanize %}\r
-\r
-{% block usercontent %}\r
- <h2>{% trans "Notifications and subscription settings" %}</h2>\r
- <p class="message">\r
- {% blocktrans %}\r
- Here you can decide which types of notifications you wish to receive, and their frequency.<br />\r
- {% endblocktrans %}\r
- {% if notificatons_on %}\r
- {% blocktrans %}\r
- Currently you have notifications enabled. You can always stop all notifications without losing your settings and restart them afterwards.<br />\r
- {% endblocktrans %}\r
- {% else %}\r
- {% blocktrans %}\r
- Currently you have notifications disabled. You can enable them by clicking on the <strong>Start notifications</strong> button below.<br />\r
- {% endblocktrans %}\r
- {% endif %}\r
- </p>\r
- <div class='inline-block'>\r
- <form method="POST">\r
- {{ form.errors }}\r
- <table class="form-as-table">\r
- <tr>\r
- <td colspan="2">\r
- <strong>{% trans "Notify me when:" %}</strong>\r
- </td>\r
- </tr>\r
- <tr>\r
- <td>{% trans "A new member joins" %}</td>\r
- <td>{{ form.member_joins }}</td>\r
- </tr>\r
- <tr>\r
- <td>{% trans "A new question is posted" %}</td>\r
- <td>{{ form.new_question }}</td>\r
- </tr>\r
- <tr>\r
- <td>{% trans "A new question matching my interesting tags is posted" %}</td>\r
- <td>{{ form.new_question_watched_tags }}</td>\r
- </tr>\r
- <tr>\r
- <td>{% trans "There's an update on one of my subscriptions" %}</td>\r
- <td >{{ form.subscribed_questions }}</td>\r
- </tr>\r
- </table>\r
- <p> </p>\r
- <table class="form-as-table check-table">\r
- <tr>\r
- <td colspan="3">\r
- <strong>{% trans "Auto subscribe me to:" %}</strong>\r
- </td>\r
- </tr>\r
- <tr>\r
- <td>\r
- {{ form.questions_asked }}{% trans "Questions I ask" %}\r
- </td>\r
- <td>\r
- {{ form.questions_answered }}{% trans "Questions I answer" %}\r
- </td>\r
- <td>\r
- {{ form.questions_commented }}{% trans "Questions I comment" %}\r
- </td>\r
- </tr>\r
- <tr> \r
- <td>\r
- {{ form.questions_viewed }}{% trans "Questions I view" %}\r
- </td>\r
- <td>\r
- {{ form.all_questions_watched_tags }}{% trans "All questions matching my interesting tags" %}\r
- </td>\r
- <td>\r
- {{ form.all_questions }}{% trans "All questions" %}\r
- </td>\r
- </tr>\r
- </table>\r
- <p> </p>\r
- <table class="form-as-table check-table">\r
- <tr>\r
- <td colspan="2">\r
- <strong>{% trans "On my subscriptions, notify me when:" %}</strong>\r
- </td>\r
- </tr>\r
- <tr>\r
- <td>\r
- {{ form.notify_answers }}{% trans "An answer is posted" %}\r
- </td>\r
- <td>\r
- {{ form.notify_comments_own_post }}{% trans "A comment on one of my posts is posted" %}\r
- </td>\r
- </tr>\r
- <tr>\r
- <td>\r
- {{ form.notify_comments }}{% trans "A comment is posted" %}\r
- </td>\r
- <td>\r
- {{ form.notify_accepted }}{% trans "An answer is accepted" %}\r
- </td>\r
- </tr>\r
- </table>\r
- <p> </p>\r
- <table class="form-as-table check-table">\r
- <tr>\r
- <td>\r
- <strong>{% trans "More:" %}</strong>\r
- </td>\r
- </tr>\r
- <tr>\r
- <td>\r
- {{ form.notify_reply_to_comments }}{% trans "Notify me when someone replies to one of my comments on any post using the <pre>@username</pre> notation" %}\r
- </td>\r
- </tr>\r
- <tr>\r
- <td>\r
- {{ form.send_digest }}{% trans "Send me the daily digest with information about the site activity" %}\r
- </td>\r
- </tr>\r
- </table>\r
- <div class="submit-row">\r
- <input type="submit" class="submit" name="save" value="{% trans "Update" %}"/>\r
- {% if notificatons_on %}\r
- <input type="submit" class="submit" name="notswitch" value="{% trans "Stop notifications" %}"/>\r
- {% else %}\r
- <input type="submit" class="submit" name="notswitch" value="{% trans "Start notifications" %}"/> \r
- {% endif %}\r
- </div>\r
- </form>\r
- </div>\r
-{% endblock %}\r
-<!-- end user_subscriptions.html -->\r
+{% extends "user.html" %}
+<!-- user_subscriptions.html -->
+{% load i18n %}
+{% load extra_tags %}
+{% load humanize %}
+
+{% block userjs %}
+ <script type="text/javascript">
+ function enableSettings() {
+ $("div#subscriptions_settings").show();
+ $("div#subscriptions_management").hide();
+
+ $("div#subscriptions_settings_button").context.activeElement.className = 'on';
+ $("div#subscriptions_management_button").context.activeElement.className = '';
+
+ //location.reload(true);
+ }
+
+ function enableManagement() {
+ $("div#subscriptions_settings").hide();
+ $("div#subscriptions_management").show();
+
+ $("div#subscriptions_settings_button").context.activeElement.className = '';
+ $("div#subscriptions_management_button").context.activeElement.className = 'on';
+
+ //location.reload(true);
+ }
+ </script>
+{% endblock %}
+
+{% block usercontent %}
+ <br/>
+
+ <div id="navBar"><div class="tabsA">
+ <a HREF="javascript:enableSettings()" id="subscriptions_settings_button">Settings</a>
+ <a HREF="javascript:enableManagement()" id="subscriptions_management_button">Remove</a>
+ </div></div>
+
+ <br/>
+ <div id="subscriptions_settings" {% if manage_open %} style="display:none" {% endif %}>
+ {% include "users/subscriptions_settings.html" %}
+ </div>
+ <div id="subscriptions_management" {% if not manage_open %} style="display:none" {% endif %}>
+ {% include "users/subscriptions_management.html" %}
+ </div>
+{% endblock %}
+<!-- end user_subscriptions.html -->
--- /dev/null
+{% load i18n %}
+{% load question_list_tags %}
+
+<br />
+<br />
+
+<div id="subscription_list" align="left">
+ <h2>
+ {% trans "Notifications and subscription settings" %}
+ <span style="font-size:11px">
+ {% if auto %}
+ <a href='{% url user_subscriptions id=view_user.id slug=view_user.username|slugify %}?auto=False'>{% trans "don't show auto-subscribe" %}</a>
+ {% else %}
+ <a href='{% url user_subscriptions id=view_user.id slug=view_user.username|slugify %}?auto=True'>{% trans "show auto-subscribe" %}</a>
+ {% endif %}
+ </span>
+ </h2>
+
+ {% for subscription in subscriptions.paginator.page %}
+ {% subscription_list_item subscription %}
+ {% endfor %}
+
+ <div class="pager">{{ subscriptions.paginator.page_numbers }}</div>
+</div>
+
+<br />
+<br />
+
+<!-- end user_subscriptions.html -->
--- /dev/null
+{% load i18n %}\r
+{% load extra_tags %}\r
+{% load humanize %}\r
+\r
+<h2>{% trans "Notifications and subscription settings" %}</h2>\r
+<p class="message">\r
+ {% blocktrans %}\r
+ Here you can decide which types of notifications you wish to receive, and their frequency.<br />\r
+ {% endblocktrans %}\r
+ {% if notificatons_on %}\r
+ {% blocktrans %}\r
+ Currently you have notifications enabled. You can always stop all notifications without losing your settings and restart them afterwards.<br />\r
+ {% endblocktrans %}\r
+ {% else %}\r
+ {% blocktrans %}\r
+ Currently you have notifications disabled. You can enable them by clicking on the <strong>Start notifications</strong> button below.<br />\r
+ {% endblocktrans %}\r
+ {% endif %}\r
+</p>\r
+<div class='inline-block'>\r
+<form method="POST">\r
+ {{ form.errors }}\r
+ <table class="form-as-table">\r
+ <tr>\r
+ <td colspan="2">\r
+ <strong>{% trans "Notify me when:" %}</strong>\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td>{% trans "A new member joins" %}</td>\r
+ <td>{{ form.member_joins }}</td>\r
+ </tr>\r
+ <tr>\r
+ <td>{% trans "A new question is posted" %}</td>\r
+ <td>{{ form.new_question }}</td>\r
+ </tr>\r
+ <tr>\r
+ <td>{% trans "A new question matching my interesting tags is posted" %}</td>\r
+ <td>{{ form.new_question_watched_tags }}</td>\r
+ </tr>\r
+ <tr>\r
+ <td>{% trans "There's an update on one of my subscriptions" %}</td>\r
+ <td >{{ form.subscribed_questions }}</td>\r
+ </tr>\r
+ </table>\r
+ <p> </p>\r
+ <table class="form-as-table check-table">\r
+ <tr>\r
+ <td colspan="3">\r
+ <strong>{% trans "Auto subscribe me to:" %}</strong>\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td>\r
+ {{ form.questions_asked }}{% trans "Questions I ask" %}\r
+ </td>\r
+ <td>\r
+ {{ form.questions_answered }}{% trans "Questions I answer" %}\r
+ </td>\r
+ <td>\r
+ {{ form.questions_commented }}{% trans "Questions I comment" %}\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td>\r
+ {{ form.questions_viewed }}{% trans "Questions I view" %}\r
+ </td>\r
+ <td>\r
+ {{ form.all_questions_watched_tags }}{% trans "All questions matching my interesting tags" %}\r
+ </td>\r
+ <td>\r
+ {{ form.all_questions }}{% trans "All questions" %}\r
+ </td>\r
+ </tr>\r
+ </table>\r
+ <p> </p>\r
+ <table class="form-as-table check-table">\r
+ <tr>\r
+ <td colspan="2">\r
+ <strong>{% trans "On my subscriptions, notify me when:" %}</strong>\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td>\r
+ {{ form.notify_answers }}{% trans "An answer is posted" %}\r
+ </td>\r
+ <td>\r
+ {{ form.notify_comments_own_post }}{% trans "A comment on one of my posts is posted" %}\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td>\r
+ {{ form.notify_comments }}{% trans "A comment is posted" %}\r
+ </td>\r
+ <td>\r
+ {{ form.notify_accepted }}{% trans "An answer is accepted" %}\r
+ </td>\r
+ </tr>\r
+ </table>\r
+ <p> </p>\r
+ <table class="form-as-table check-table">\r
+ <tr>\r
+ <td>\r
+ <strong>{% trans "More:" %}</strong>\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td>\r
+ {{ form.notify_reply_to_comments }}{% trans "Notify me when someone replies to one of my comments on any post using the <pre>@username</pre> notation" %}\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td>\r
+ {{ form.send_digest }}{% trans "Send me the daily digest with information about the site activity" %}\r
+ </td>\r
+ </tr>\r
+ </table>\r
+ <div class="submit-row">\r
+ <input type="submit" class="submit" name="save" value="{% trans "Update" %}"/>\r
+ {% if notificatons_on %}\r
+ <input type="submit" class="submit" name="notswitch" value="{% trans "Stop notifications" %}"/>\r
+ {% else %}\r
+ <input type="submit" class="submit" name="notswitch" value="{% trans "Start notifications" %}"/>\r
+ {% endif %}\r
+ </div>\r
+</form>\r
+</div>\r
'signature_type': self.options.get('signature_type', 'lite'),\r
}))\r
\r
+class SubscriptionItemNode(template.Node):\r
+ template = template.loader.get_template('question_list/subscription_item.html')\r
+\r
+ def __init__(self, question, options):\r
+ self.question = template.Variable(question)\r
+ self.options = options\r
+\r
+ def render(self, context):\r
+ return self.template.render(template.Context({\r
+ 'question': self.question.resolve(context),\r
+ 'signature_type': self.options.get('signature_type', 'lite'),\r
+ }))\r
+\r
@register.tag\r
def question_list_item(parser, token):\r
tokens = token.split_contents()[1:]\r
return QuestionItemNode(tokens[0], argument_parser(tokens[1:]))\r
- \r
+\r
+@register.tag\r
+def subscription_list_item(parser, token):\r
+ tokens = token.split_contents()[1:]\r
+ return SubscriptionItemNode(tokens[0], argument_parser(tokens[1:]))\r
\r
@register.inclusion_tag('question_list/sort_tabs.html')\r
def question_sort_tabs(sort_context):\r
kwargs=dict(close=True), name='close'),
url(r'^%s(?P<id>\d+)/%s$' % (_('questions/'), _('reopen/')), app.commands.close,
kwargs=dict(close=False), name='reopen'),
- url(r'^%s(?P<id>\d+)/%s$' % (_('questions/'), _('answer/')), app.writers.answer, name='answer'),
+ url(r'^%s(?P<id>\d+)/%s$' % (_('questions/'), _('answer/')), app.writers.answer, name='answer'),
url(r'^%s(?P<action>\w+)/$' % _('pending-data/'), app.writers.manage_pending_data, name='manage_pending_data'),
url(r'^%s(?P<id>\d+)/(?P<vote_type>[a-z]+)/' % _('vote/'), app.commands.vote_post,
url(r'^%s$' % _('users/'), app.users.users, name='users'),
+ url(r'^%s$' % _('online_users/'), app.users.online_users, name='online_users'),
+
+
url(r'^%s(?P<id>\d+)/%s$' % (_('users/'), _('edit/')), app.users.edit_user, name='edit_user'),
url(r'^%s(?P<id>\d+)/%s$' % (_('users/'), _('award/')), app.users.award_points,
name='user_award_points'),
url(r'^%s(?P<id>\d+)/(?P<slug>.+)/%s$' % (_('users/'), _('recent/')), app.users.user_recent,
name='user_recent'),
url(r'^%s(?P<id>\d+)/(?P<slug>.+)/$' % _('users/'), app.users.user_profile, name='user_profile'),
-
url(r'^%s$' % _('badges/'), app.meta.badges, name='badges'),
url(r'^%s(?P<id>\d+)/(?P<slug>.+)$' % _('badges/'), app.meta.badge, name='badge'),
# (r'^admin/doc/' % _('admin/doc'), include('django.contrib.admindocs.urls')),
url(r'^feeds/rss[/]?$', app.readers.feed, name="latest_questions_feed"),
- url(r'^(?P<path>.+)$', app.meta.page, name="static_page")
+ url(r'^(?P<path>.+)$', app.meta.page, name="static_page"),
)
from forum.utils.html import sanitize_html\r
from forum.modules import decorate\r
from datetime import datetime, date\r
-import decorators\r
from forum.actions import EditProfileAction, FavoriteAction, BonusRepAction, SuspendAction\r
from forum.modules import ui\r
from forum.utils import pagination\r
from forum.views.readers import QuestionListPaginatorContext, AnswerPaginatorContext\r
\r
import time\r
+import datetime\r
import decorators\r
\r
class UserReputationSort(pagination.SimpleSort):\r
(_('name'), pagination.SimpleSort(_('by username'), 'username', _("sorted by username"))),\r
), pagesizes=(20, 35, 60))\r
\r
+class SubscriptionListPaginatorContext(pagination.PaginatorContext):\r
+ def __init__(self):\r
+ super (SubscriptionListPaginatorContext, self).__init__('SUBSCRIPTION_LIST', pagesizes=(5, 10, 20), default_pagesize=20)\r
+\r
class UserAnswersPaginatorContext(pagination.PaginatorContext):\r
def __init__(self):\r
super (UserAnswersPaginatorContext, self).__init__('USER_ANSWER_LIST', sort_methods=(\r
})\r
\r
\r
+@decorators.render('users/online_users.html', 'online_users', _('Online Users'), weight=200)\r
+def online_users(request):\r
+ suser = request.REQUEST.get('q', "")\r
+\r
+ one_hour_ago = datetime.datetime.now() - datetime.timedelta(hours=1)\r
+ sql_datetime = datetime.datetime.strftime(one_hour_ago, '%Y-%m-%d %H:%M:%S')\r
+ users = User.objects.order_by('-last_seen')\r
+\r
+ return pagination.paginated(request, ('users', UserListPaginatorContext()), {\r
+ "users" : users,\r
+ "suser" : suser,\r
+ })\r
+\r
+\r
@login_required\r
def edit_user(request, id):\r
user = get_object_or_404(User, id=id)\r
\r
return {"favorites" : favorites, "view_user" : user}\r
\r
-@user_view('users/subscriptions.html', 'subscriptions', _('subscription settings'), _('subscriptions'), True, tabbed=False)\r
+@user_view('users/subscriptions.html', 'subscriptions', _('subscription'), _('subscriptions'), True, tabbed=False)\r
def user_subscriptions(request, user):\r
enabled = user.subscription_settings.enable_notifications\r
+ auto = request.GET.get('auto', 'True')\r
+ show_auto = True\r
+ manage_open = False\r
+ \r
+ if len(request.GET) > 0:\r
+ manage_open = True\r
+ \r
+ if auto == 'True':\r
+ show_auto = True\r
+ subscriptions = user.subscriptions.all().order_by('-questionsubscription__last_view')\r
+ else:\r
+ show_auto = False\r
+ subscriptions = user.subscriptions.filter(questionsubscription__auto_subscription=False).order_by('-questionsubscription__last_view')\r
\r
- if request.method == 'POST': \r
+ if request.method == 'POST':\r
+ manage_open = False\r
form = SubscriptionSettingsForm(data=request.POST, instance=user.subscription_settings)\r
\r
if form.is_valid():\r
else:\r
form = SubscriptionSettingsForm(instance=user.subscription_settings)\r
\r
- return {'view_user':user, 'notificatons_on': enabled, 'form':form}\r
+ return pagination.paginated(request, ('subscriptions', SubscriptionListPaginatorContext()), {\r
+ 'subscriptions':subscriptions,\r
+ 'view_user':user,\r
+ 'notificatons_on': enabled,\r
+ 'form':form,\r
+ "auto":show_auto,\r
+ "manage_open":manage_open\r
+ })\r
\r
@user_view('users/preferences.html', 'preferences', _('preferences'), _('preferences'), True, tabbed=False)\r
def user_preferences(request, user):\r
'msg': msg,\r
'is_openid': is_openid\r
}, context_instance=RequestContext(request))\r
-\r