コード例 #1
0
ファイル: conditions_tests.py プロジェクト: ilwoof/makahiki
 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.")
コード例 #2
0
ファイル: models.py プロジェクト: tmac408/makahiki
  def save(self):
    """Custom save method to set fields depending on whether or not the item is just added or if the item is completed."""
    profile = self.user.get_profile()
    
    if not self.completion_date:
      self.completion_date = datetime.date.today() + datetime.timedelta(days=self.commitment.duration)
      
    if not self.pk and profile.floor:
      # User is adding the commitment.
      message = "is participating in the commitment \"%s\"." % (
        self.commitment.title,
      )
      post = Post(user=self.user, floor=profile.floor, text=message, style_class="system_post")
      post.save()
      
    if self.award_date:
      # User has finished the commitment.
      # Award the points
      profile = self.user.get_profile()
      profile.add_points(self.commitment.point_value, self.award_date)
      profile.save()
      
      if profile.floor:
        # Construct the points
        message = "has completed the commitment \"%s\"." % (
          self.commitment.title,
        )

        post = Post(user=self.user, floor=self.user.get_profile().floor, text=message, style_class="system_post")
        post.save()
        
    super(CommitmentMember, self).save()
    
    # Note, possibly_award is here because the member needs to be saved.
    badges.possibly_award_badge("fully_committed", user=self.user)
コード例 #3
0
def award_badge(slug, username):
    try:
        user = User.objects.get(username=username)
        badge = badges.possibly_award_badge(slug, user=user)
    except User.DoesNotExist:
        self.stderr.write("User with the username %s does not exist.\n" %
                          username)
    except KeyError:
        self.stderr.write("Badge with the slug %s does not exist.\n" % slug)
コード例 #4
0
ファイル: tests.py プロジェクト: tmac408/makahiki
 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()
   badges.possibly_award_badge("dailyvisitor", user=user)
   
   self.assertEqual(user.badges_earned.count(), 1, "Check that a badge has been awarded.")
   self.assertEqual(user.badges_earned.all()[0].slug, "dailyvisitor", "Check that the daily visitor badge was awarded.")
コード例 #5
0
ファイル: middleware.py プロジェクト: tmac408/makahiki
  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()
        
    return None
コード例 #6
0
 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()
   badges.possibly_award_badge("dailyvisitor", user=user)
   
   self.assertEqual(user.badges_earned.count(), 1, "Check that a badge has been awarded.")
   self.assertEqual(user.badges_earned.all()[0].slug, "dailyvisitor", "Check that the daily visitor badge was awarded.")
コード例 #7
0
ファイル: middleware.py プロジェクト: ilwoof/makahiki
  def process_request(self, request):
    """Checks if the user is logged in and updates the tracking field."""
    user = request.user
    if 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()
        if user.badges_earned.filter(slug="dailyvisitor").count() == 0:
          badges.possibly_award_badge(user_badges.DailyVisitorBadge.slug, 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()
        
    return None
コード例 #8
0
ファイル: models.py プロジェクト: ilwoof/makahiki
  def save(self):
    """Custom save method to set fields depending on whether or not the item is just added or if the item is completed."""
    profile = self.user.get_profile()
    
    if not self.completion_date:
      self.completion_date = datetime.date.today() + datetime.timedelta(days=self.commitment.duration)
      
    if not self.pk and profile.floor:
      # User is adding the commitment.
      message = "is participating in the commitment \"%s\"." % (
        self.commitment.title,
      )
      post = Post(user=self.user, floor=profile.floor, text=message, style_class="system_post")
      post.save()
      
    if self.award_date:
      # User has finished the commitment.
      # Award the points
      profile = self.user.get_profile()
      message = "%sCommitment: %s"  % (
          'Canopy ' if self.commitment.is_canopy else '',
          self.commitment.title
      )
      profile.add_points(self.commitment.point_value, self.award_date, message, self)
      profile.save()

      ## award social bonus to myself if the ref user had successfully completed the activity
      social_message = message + "(Social Bonus)"
      if self.social_email:
        ref_user = User.objects.get(email=self.social_email)
        ref_members = CommitmentMember.objects.filter(user=ref_user, commitment=self.commitment)
        for m in ref_members:
          if m.award_date:
            profile.add_points(self.commitment.social_bonus, self.award_date, social_message, self)
            profile.save()
      
      ## award social bonus to others who referenced my email and successfully completed the activity
      ref_members = CommitmentMember.objects.filter(commitment=self.commitment, social_email=self.user.email)
      for m in ref_members:
        if m.award_date:
          ref_profile = m.user.get_profile()
          ref_profile.add_points(self.commitment.social_bonus, self.award_date, social_message, self)
          ref_profile.save()
      
      if profile.floor:
        # Construct the points
        message = "has completed the commitment \"%s\"." % (
          self.commitment.title,
        )

        post = Post(user=self.user, floor=self.user.get_profile().floor, text=message, style_class="system_post")
        post.save()
        
    # Invalidate the categories cache.
    cache.delete('smartgrid-categories-%s' % self.user.username)
    cache.delete('user_events-%s' % self.user.username)
    invalidate_floor_avatar_cache(self.commitment, self.user)
    invalidate_commitments_cache(self.user)
    super(CommitmentMember, self).save()
    
    # Note, possibly_award is here because the member needs to be saved.
    badges.possibly_award_badge(user_badges.FullyCommittedBadge.slug, user=self.user)