from django.contrib.auth.models import User
from django.views.generic import TemplateView
from django.views.generic.list import MultipleObjectMixin
-from karmaworld.apps.notes.models import Note
-from karmaworld.apps.users.models import NoteKarmaEvent, CourseKarmaEvent, GenericKarmaEvent
+from karmaworld.apps.users.models import ALL_KARMA_EVENT_CLASSES
class ProfileView(TemplateView, MultipleObjectMixin):
context_object_name = 'user' # name passed to template
template_name = 'user_profile.html'
- @staticmethod
- def compareProfileItems(a, b):
- if a.__class__ == Note:
- timestampA = a.uploaded_at
- else:
- timestampA = a.timestamp
-
- if b.__class__ == Note:
- timestampB = b.uploaded_at
- else:
- timestampB = b.timestamp
-
- if timestampA < timestampB:
- return -1
- elif timestampA > timestampB:
- return 1
- else:
- return 0
-
def get_context_data(self, **kwargs):
- notes = [('note', o) for o in Note.objects.filter(user=self.request.user)]
- generic_karma_events = [('generic_karma_events', o) for o in GenericKarmaEvent.objects.filter(user=self.request.user)]
- note_karma_events = [('note_karma_event', o) for o in NoteKarmaEvent.objects.filter(user=self.request.user)]
- course_karma_events = [('course_karma_event', o) for o in CourseKarmaEvent.objects.filter(user=self.request.user)]
-
- result_list = sorted(chain(notes, generic_karma_events, note_karma_events, course_karma_events),
- cmp=ProfileView.compareProfileItems,
- key=lambda o: o[1],
+ all_events = []
+ for cls in ALL_KARMA_EVENT_CLASSES:
+ all_events.append(
+ [(cls.__name__, o) for o in cls.objects.filter(user=self.request.user)]
+ )
+
+ result_list = sorted(chain.from_iterable(all_events),
+ key=lambda o: o[1].timestamp,
reverse=True)
kwargs['object_list'] = result_list
- return super(ProfileView, self).get_context_data(**kwargs)
+ kwargs['badge'] = self.request.user.get_profile().get_badge()
+ return super(ProfileView, self).get_context_data(**kwargs)