def testBadgeAwarded(self): """Tests that badge awarded works for a user.""" from components.makahiki_badges.user_badges import DailyVisitorBadge badges.register(DailyVisitorBadge) profile = self.user.get_profile() self.assertFalse(badge_awarded(self.user, "dailyvisitor"), "New user should not be awarded the daily visitor badge.") # Test as a quest unlock condition. self.quest.unlock_conditions = "badge_awarded('dailyvisitor')" self.quest.save() self.assertTrue(self.quest not in get_quests(self.user), "User should not be able to participate in this quest.") self.quest.unlock_conditions = "not badge_awarded('dailyvisitor')" self.quest.save() self.assertTrue(self.quest in get_quests(self.user)["available_quests"], "User should be able to participate in this quest.") self.quest.accept(self.user) self.quest.completion_conditions = "badge_awarded('dailyvisitor')" self.quest.save() self.assertTrue(self.quest not in possibly_completed_quests(self.user), "User should not be able to complete this quest.") profile.daily_visit_count = 3 profile.save() badges.possibly_award_badge("dailyvisitor", user=self.user) self.assertTrue(badge_awarded(self.user, "dailyvisitor"), "User should have been awarded the daily visitor badge.") self.assertTrue(self.quest in possibly_completed_quests(self.user), "User should have completed this quest.")
"Awarded", ] events = [ "dailyvisitor", ] multiple = False image = "images/badges/Threepeater.gif" def award(self, **state): user = state["user"] visits = user.get_profile().daily_visit_count if visits >= 3: return BadgeAwarded() badges.register(DailyVisitorBadge) class FullyCommittedBadge(Badge): name = "Fully Committed" description = [ "Participating in 5 commitments at the same time.", ] hint = "How committed are you?" slug = "fully_committed" levels = [ "Awarded", ] events = [ "fully_committed", ]
import datetime from django.test import TestCase from django.contrib.auth.models import User from lib.brabeion import badges from components.makahiki_badges.user_badges import DailyVisitorBadge, FullyCommittedBadge from components.activities.models import Commitment, CommitmentMember badges.register(DailyVisitorBadge) badges.register(FullyCommittedBadge) class DailyVisitorBadgeTest(TestCase): def test_awarding(self): """ Tests that the daily visitor badge is awarded to a user. """ user = User(username="******", password="******") user.save() self.assertEqual(user.badges_earned.count(), 0, "Check that no badges are awarded.") profile = user.get_profile() profile.daily_visit_count = 1 profile.save() badges.possibly_award_badge("dailyvisitor", user=user) self.assertEqual(user.badges_earned.count(), 0, "Check that still no badges are awarded.") profile.daily_visit_count = 3 profile.save()
import datetime from components.makahiki_badges.user_badges import DailyVisitorBadge from lib.brabeion import badges badges.register(DailyVisitorBadge) class LoginTrackingMiddleware(object): """ This middleware tracks how many days in a row the user has come to the site. """ def process_request(self, request): """Checks if the user is logged in and updates the tracking field.""" if request.user.is_authenticated(): profile = request.user.get_profile() last_visit = request.user.get_profile().last_visit_date today = datetime.date.today() # Look for a previous login. if last_visit and (today - last_visit) == datetime.timedelta(days=1): profile.last_visit_date = today profile.daily_visit_count += 1 profile.save() badges.possibly_award_badge("dailyvisitor", user=request.user) elif not last_visit or (today - last_visit) > datetime.timedelta(days=1): # Reset the daily login count. profile.last_visit_date = today profile.daily_visit_count = 1 profile.save()
import datetime import random import string import os from django.db import models, IntegrityError from django.contrib.auth.models import User from django.contrib.contenttypes import generic from django.core.urlresolvers import reverse # Register badges immediately. from components.makahiki_badges.user_badges import FullyCommittedBadge from lib.brabeion import badges badges.register(FullyCommittedBadge) from components.floors.models import Post from components.makahiki_base.models import Like from components.makahiki_notifications.models import UserNotification MARKDOWN_LINK = "http://daringfireball.net/projects/markdown/syntax" MARKDOWN_TEXT = "Uses <a href=\"" + MARKDOWN_LINK + "\" target=\"_blank\">Markdown</a> formatting." class Category(models.Model): """Categories used to group commitments and activities.""" name = models.CharField(max_length=255, help_text="255 character maximum") slug = models.SlugField(help_text="Automatically generated if left blank.", null=True) class Meta: verbose_name_plural = "categories"