--- /dev/null
+{% extends "base_content.html" %}
+<!-- users.html -->
+{% load extra_tags %}
+{% load humanize %}
+{% load i18n %}
+{% block title %}{% spaceless %}{% trans "Users Online" %}{% endspaceless %}{% endblock %}
+{% block forejs %}
+ <script type="text/javascript">
+ //todo move javascript out
+ $().ready(function(){
+ $("#type-user").attr('checked',true);
+ var orderby = "{{ tab_id }}";
+ $("#sort_" + orderby).attr('className',"on");
+
+ Hilite.exact = false;
+ Hilite.elementid = "main-body";
+ Hilite.debug_referrer = location.href;
+ });
+ </script>
+{% endblock %}
+{% block content %}
+<div class="tabBar">
+ <div class="headUsers">{% trans "Users Online" %}</div>
+ {{ users.paginator.sort_tabs }}
+</div>
+<div id="main-body" style="width:100%">
+ <p>
+ {% if suser %}
+ {% blocktrans %}users matching query {{suser}}:{% endblocktrans %}
+ {% endif %}
+
+ {% if not users.paginator.count %}
+ <span>{% trans "Nothing found." %}</span>
+ {% endif %}
+ </p>
+ <div class="userList">
+ {% for user in users.paginator.page %}
+ <div class="user">
+ <ul>
+ <li class="thumb"><a href="{{ user.get_profile_url }} ">{% gravatar user 32 %}</a></li>
+ <li><a {% if user.is_suspended %}class="suspended-user" {% endif %}href="{{ user.get_profile_url }}">{{ user.decorated_name }}</a></li>
+ <li>{% get_score_badge user %}</li>
+ </ul>
+ </div>
+ {% endfor %}
+ </div>
+</div>
+{% endblock %}
+{% block tail %}
+<div class="pager">
+ {{ users.paginator.page_numbers }}
+</div>
+{% endblock %}
+<!-- end users.html -->
from django.template import RequestContext\r
from django.utils.translation import ungettext, ugettext as _\r
from forum.modules import ui, decorate\r
+from datetime import datetime, date\r
+from forum.settings import ONLINE_USERS\r
import logging\r
\r
def login_required(func, request, *args, **kwargs):\r
def render(template=None, tab=None, tab_title='', weight=500, tabbed=True):\r
def decorator(func): \r
def decorated(context, request, *args, **kwargs):\r
+ if request.user.is_authenticated():\r
+ ONLINE_USERS[request.user] = datetime.now()\r
+\r
if isinstance(context, HttpResponse):\r
return context\r
\r
from forum.modules import ui\r
from forum.utils import pagination\r
from forum.views.readers import QuestionListPaginatorContext, AnswerPaginatorContext\r
-\r
+from forum.settings import ONLINE_USERS\r
+ \r
+import bisect\r
import time\r
import datetime\r
import decorators\r
})\r
\r
\r
-#@decorators.render('users/online_users.html', 'online_users', _('Online Users'), weight=200)\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
+ sort = ""\r
+ if request.GET.get("sort", None):\r
+ try:\r
+ sort = int(request.GET["sort"])\r
+ except ValueError:\r
+ logging.error('Found invalid sort "%s", loading %s, refered by %s' % (\r
+ request.GET.get("sort", ''), request.path, request.META.get('HTTP_REFERER', 'UNKNOWN')\r
+ ))\r
+ raise Http404()\r
\r
- return pagination.paginated(request, ('users', UserListPaginatorContext()), {\r
+ page = 0\r
+ if request.GET.get("page", None):\r
+ try:\r
+ page = int(request.GET["page"])\r
+ except ValueError:\r
+ logging.error('Found invalid page "%s", loading %s, refered by %s' % (\r
+ request.GET.get("page", ''), request.path, request.META.get('HTTP_REFERER', 'UNKNOWN')\r
+ ))\r
+ raise Http404()\r
+\r
+ pagesize = 10\r
+ if request.GET.get("pagesize", None):\r
+ try:\r
+ pagesize = int(request.GET["pagesize"])\r
+ except ValueError:\r
+ logging.error('Found invalid pagesize "%s", loading %s, refered by %s' % (\r
+ request.GET.get("pagesize", ''), request.path, request.META.get('HTTP_REFERER', 'UNKNOWN')\r
+ ))\r
+ raise Http404()\r
+\r
+\r
+ users = None\r
+ if sort == "reputation":\r
+ users = sorted(ONLINE_USERS.sets.keys(), key=lambda user: user.reputation)\r
+ elif sort == "newest" :\r
+ users = sorted(ONLINE_USERS.sets.keys(), key=lambda user: user.newest)\r
+ elif sort == "last":\r
+ users = sorted(ONLINE_USERS.sets.keys(), key=lambda user: user.last)\r
+ elif sort == "name":\r
+ users = sorted(ONLINE_USERS.sets.keys(), key=lambda user: user.name)\r
+ elif sort == "oldest":\r
+ users = sorted(ONLINE_USERS.sets.keys(), key=lambda user: user.oldest)\r
+ elif sort == "newest":\r
+ users = sorted(ONLINE_USERS.sets.keys(), key=lambda user: user.newest)\r
+ elif sort == "votes":\r
+ users = sorted(ONLINE_USERS.sets.keys(), key=lambda user: user.votes)\r
+ else:\r
+ users = sorted(ONLINE_USERS.iteritems(), key=lambda x: x[1])\r
+\r
+ return render_to_response('users/online_users.html', {\r
"users" : users,\r
"suser" : suser,\r
+ "sort" : sort,\r
+ "page" : page,\r
+ "pageSize" : pagesize,\r
})\r
\r
\r
return render_to_response('users/suspend_user.html')\r
\r
data = {\r
- 'bantype': request.POST.get('bantype', 'indefinetly').strip(),\r
- 'publicmsg': request.POST.get('publicmsg', _('Bad behaviour')),\r
- 'privatemsg': request.POST.get('privatemsg', None) or request.POST.get('publicmsg', ''),\r
- 'suspended': user\r
+ 'bantype': request.POST.get('bantype', 'indefinetly').strip(),\r
+ 'publicmsg': request.POST.get('publicmsg', _('Bad behaviour')),\r
+ 'privatemsg': request.POST.get('privatemsg', None) or request.POST.get('publicmsg', ''),\r
+ 'suspended': user\r
}\r
\r
if data['bantype'] == 'forxdays':\r