]> git.openstreetmap.org Git - osqa.git/commitdiff
This is for the online users page. It has been disable. I am committing it so that...
authorcourt <court@0cfe37f9-358a-4d5e-be75-b63607b5c754>
Fri, 20 Aug 2010 21:14:54 +0000 (21:14 +0000)
committercourt <court@0cfe37f9-358a-4d5e-be75-b63607b5c754>
Fri, 20 Aug 2010 21:14:54 +0000 (21:14 +0000)
git-svn-id: http://svn.osqa.net/svnroot/osqa/trunk@565 0cfe37f9-358a-4d5e-be75-b63607b5c754

forum/settings/__init__.py
forum/skins/default/templates/users/online_users.html [new file with mode: 0644]
forum/urls.py
forum/views/decorators.py
forum/views/users.py
forum/views/writers.py

index 32f11ee483bfbb023ebf76c3eacab9baf46ca041..ae09261d2b2fe488a637e857767fbd8201a61595 100644 (file)
@@ -19,6 +19,7 @@ FORUM_SCRIPT_ALIAS = djsettings.FORUM_SCRIPT_ALIAS
 OSQA_SKIN = djsettings.OSQA_DEFAULT_SKIN
 LANGUAGE_CODE = djsettings.LANGUAGE_CODE
 ADMIN_MEDIA_PREFIX = djsettings.ADMIN_MEDIA_PREFIX
+ONLINE_USERS = Setting('ONLINE_USERS', {})
 
 
 from basic import *
diff --git a/forum/skins/default/templates/users/online_users.html b/forum/skins/default/templates/users/online_users.html
new file mode 100644 (file)
index 0000000..903e895
--- /dev/null
@@ -0,0 +1,54 @@
+{% 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 -->
index 51cccefcf9586644335f7254d879c16b27855738..c5a8a1610c7f06992a863f04aa4f88ab7242a556 100644 (file)
@@ -116,7 +116,7 @@ urlpatterns += patterns('',
 
 
                         url(r'^%s$' % _('users/'), app.users.users, name='users'),
-                        url(r'^%s$' % _('online_users/'), app.users.online_users, name='online_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'),
index f72703b906cfb030da76559b2a9ce66ffd0910a1..20eb45cbfb544c3dd76d0da8b5ef05f1c7324d81 100644 (file)
@@ -6,6 +6,8 @@ from django.core.urlresolvers import reverse
 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
@@ -17,6 +19,9 @@ def login_required(func, request, *args, **kwargs):
 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
index d95b3027259624e2ff4d95560d3aaea95f1358a0..1d12b4eb186053715998691d760d65ef9f9cbba7 100644 (file)
@@ -21,7 +21,9 @@ from forum.actions import EditProfileAction, FavoriteAction, BonusRepAction, Sus
 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
@@ -68,17 +70,65 @@ def users(request):
     })\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
@@ -187,10 +237,10 @@ def suspend(request, id):
             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
index 07364f7647da985ff2c8547316504abcf9a7af7f..017914b793727c2465ae941d2d26b347c1ec0260 100644 (file)
@@ -110,7 +110,17 @@ def ask(request):
         }, context_instance=RequestContext(request))
 
 def edit_question(request, id):
-    question = get_object_or_404(Question, id=id)
+    #question = get_object_or_404(Question, id=id)
+    try:
+        question = Question.objects.get(id=id)
+    except:
+        if slug:
+            question = match_question_slug(slug)
+            if question is not None:
+                return HttpResponseRedirect(question.get_absolute_url())
+
+        raise Http404()
+
     if question.nis.deleted and not request.user.can_view_deleted_post(question):
         raise Http404
     if request.user.can_edit_post(question):