special_challenge.status = STATUS_DONE special_challenge.save() class SpecialChallengeGame(Game): class Meta: proxy = True QPOOL_CATEGORY = 'specialchallenge' def __init__(self, *args, **kwargs): self._meta.get_field('verbose_name').default = "Special Challenge" self._meta.get_field('short_name').default = "" self._meta.get_field('url').default = "specialchallenge_index" super(SpecialChallengeGame, self).__init__(*args, **kwargs) @classmethod def get_category(cls): return Category.objects.get(name=cls.QPOOL_CATEGORY) @classmethod def get_sidebar_widget(kls, context): if kls.disabled(): return '' return render_to_string('specialchallenge/sidebar.html', {}) @classmethod def get_manager(cls, challenge): return SpecialChallengeManager(challenge) register_category(SpecialChallengeGame.QPOOL_CATEGORY, SpecialChallengeGame) register_sidebar_block('specialchallenge', SpecialChallengeGame.get_sidebar_widget)
@property def expired_quizzes(self): through = UserToQuiz.objects.filter(user=self) expired_quizzes = [t for t in through if t.quiz.is_expired()] return expired_quizzes @property def played_quizzes(self): through = UserToQuiz.objects.filter(user=self, state='P') return through Player.register_extension('quiz', QuizUser) register_category(QuizGame.QPOOL_CATEGORY, QuizGame) class UserToQuiz(models.Model): """ Used as a link between each user and each quiz """ CHOICES = { ('P', 'PLAYED'), ('R', 'RUNNING'), ('N', 'NOT RUNNING') } user = models.ForeignKey(QuizUser) quiz = models.ForeignKey(Quiz) questions = models.ManyToManyField(Question)
def get_sidebar_widget(cls, context): user = context.get('user', None) if not user or user.is_anonymous(): return '' if WorkshopGame.disabled(): return '' player = user.get_profile() ws_player = player.get_extension(WorkshopPlayer) semigroups = cls.get_semigroups() workshop = cls.get_for_player_now(player) if workshop: assessment = workshop.get_assessment(player) else: assessment = None sm = ws_player.semigroup in semigroups return render_to_string( 'workshop/sidebar.html', { 'semigroups': semigroups, 'workshop': workshop, 'semigroup_member': sm, 'assessment': assessment, 'id': 'workshop' }) register_sidebar_block('workshop', WorkshopGame.get_sidebar_widget) register_category(WorkshopGame.QPOOL_CATEGORY, WorkshopGame)
def get_api(kls): from api import ChallengesHandler, ChallengeLaunch, ChallengeHandler, ChallengeGetRandom return {r'^challenge/list/$': ChallengesHandler, r'^challenge/random/$': ChallengeGetRandom, r'^challenge/launch/(?P<player_id>\d+)/$': ChallengeLaunch, r'^challenge/(?P<challenge_id>\d+)/$': ChallengeHandler, r'^challenge/(?P<challenge_id>\d+)/(?P<action>refuse|cancel|accept)/$': ChallengeHandler, } @classmethod def get_manager(cls, challenge): return DefaultChallengeManager(challenge) register_category(ChallengeGame.QPOOL_CATEGORY, ChallengeGame) # Hack for having participants in sync def challenge_post_delete(sender, instance, **kwargs): """ For some reason, this is called twice. Needs investigantion Also, in django devele, on_delete=cascade will fix this hack """ try: instance.user_from.delete() instance.user_to.delete() except: pass models.signals.post_delete.connect(challenge_post_delete, Challenge)
class SpecialChallengeGame(Game): class Meta: proxy = True QPOOL_CATEGORY = 'specialchallenge' def __init__(self, *args, **kwargs): self._meta.get_field('verbose_name').default = "Special Challenge" self._meta.get_field('short_name').default = "" self._meta.get_field('url').default = "specialchallenge_index" super(SpecialChallengeGame, self).__init__(*args, **kwargs) @classmethod def get_category(cls): return Category.objects.get(name=cls.QPOOL_CATEGORY) @classmethod def get_sidebar_widget(kls, context): if kls.disabled(): return '' return render_to_string('specialchallenge/sidebar.html', {}) @classmethod def get_manager(cls, challenge): return SpecialChallengeManager(challenge) register_category(SpecialChallengeGame.QPOOL_CATEGORY, SpecialChallengeGame) register_sidebar_block('specialchallenge', SpecialChallengeGame.get_sidebar_widget)
fs.append(dict(name='qotd-ok', expression='points=4 + (1 if {hour} < 12 else -1)', owner=qotd_game.game, description='Points earned on a correct \ answer in the morning')) fs.append(dict(name="qotd-ok-bonus", expression='points=2', owner=qotd_game.game, description='Points earned in case of bonus') ) return fs @classmethod def get_api(kls): from api import QotdHandler return {r'^qotd/today/$': QotdHandler} @classmethod def get_modifiers(cls): return ['qotd-blind', # player cannot launch QuestionOfTheDay ] @classmethod def get_history(cls): today = datetime.now() qs = Schedule.objects.filter(day__lte=today).order_by('-day')[:7] return qs register_category(QotdGame.QPOOL_CATEGORY, QotdGame)
QuestAdminUserHandler } @classmethod def final_exists(cls): return FinalQuest.objects.all().count() != 0 @classmethod def get_final(cls): try: return FinalQuest.objects.all()[0] except IndexError: return None register_category(QuestGame.QPOOL_CATEGORY, QuestGame) class FinalQuest(Quest): def give_level_bonus(self): final = QuestGame.get_final() if not final: return for level in xrange(len(self.levels) + 1): if level == 0: continue users = QuestUser.objects.filter(current_quest=final, current_level__gte=level, race__can_play=True)
expression='points=4 + (1 if {hour} < 12 else -1)', owner=qotd_game.game, description='Points earned on a correct \ answer in the morning')) fs.append( dict(name="qotd-ok-bonus", expression='points=2', owner=qotd_game.game, description='Points earned in case of bonus')) return fs @classmethod def get_api(kls): from api import QotdHandler return {r'^qotd/today/$': QotdHandler} @classmethod def get_modifiers(cls): return [ 'qotd-blind', # player cannot launch QuestionOfTheDay ] @classmethod def get_history(cls): today = datetime.now() qs = Schedule.objects.filter(day__lte=today).order_by('-day')[:7] return qs register_category(QotdGame.QPOOL_CATEGORY, QotdGame)
@classmethod def get_question_category(cls): return Category.objects.get_or_create(name='workshop')[0] @classmethod def get_sidebar_widget(cls, context): user = context.get('user', None) if not user or user.is_anonymous(): return '' if WorkshopGame.disabled(): return '' player = user.get_profile() ws_player = player.get_extension(WorkshopPlayer) semigroups = cls.get_semigroups() workshop = cls.get_for_player_now(player) if workshop: assessment = workshop.get_assessment(player) else: assessment = None sm = ws_player.semigroup in semigroups return render_to_string('workshop/sidebar.html', {'semigroups': semigroups, 'workshop': workshop, 'semigroup_member': sm, 'assessment': assessment, 'id': 'workshop'}) register_sidebar_block('workshop', WorkshopGame.get_sidebar_widget) register_category(WorkshopGame.QPOOL_CATEGORY, WorkshopGame)