Exemple #1
0
        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)
Exemple #2
0
    @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)
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
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)
Exemple #6
0
        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)
Exemple #7
0
            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)
Exemple #8
0
                 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)
Exemple #9
0
    @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)