]> 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
 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 *
 
 
 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$' % _('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'),
 
 
                         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 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
 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
 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
             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
 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
 import time\r
 import datetime\r
 import decorators\r
@@ -68,17 +70,65 @@ def users(request):
     })\r
 \r
 \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
 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
 \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
         "users" : users,\r
         "suser" : suser,\r
+        "sort" : sort,\r
+        "page" : page,\r
+        "pageSize" : pagesize,\r
     })\r
 \r
 \r
     })\r
 \r
 \r
@@ -187,10 +237,10 @@ def suspend(request, id):
             return render_to_response('users/suspend_user.html')\r
 \r
     data = {\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
     }\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):
         }, 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):
     if question.nis.deleted and not request.user.can_view_deleted_post(question):
         raise Http404
     if request.user.can_edit_post(question):