Esempio n. 1
0
def attempt_problem_pe(user_data, user_exercise, attempt_number,
    submit_time, time_taken, threshold, score,      
    module, ip_address):
    """
    Stores data related to a PE exercise attempt
    """

    if user_exercise:   # and user_exercise.belongs_to(user_data):
        dt_now =  date_from_timestamp(submit_time)   #datetime.datetime.now()
        exercise = user_exercise.exercise
        user_exercise.last_done = dt_now
        count_hints = 0
        # Build up problem log
        problem_log = UserExerciseLog(
                user=user_data.user,
                exercise=user_exercise.exercise,
                time_taken=int(round(int(time_taken)/1000)),
                time_done=dt_now,
                count_hints=count_hints,
                hint_used=int(count_hints) > 0,
                correct=score>= threshold,
                count_attempts=attempt_number,
                ip_address=ip_address,
        )

        #update list of started exercises
        if not user_data.has_started(exercise):
            user_data.started(exercise.id)

        #just_earned_proficiency = False
        
        user_exercise.total_done += 1
        value = False
        proficient = user_data.is_proficient_at(user_exercise.exercise)
        if problem_log.correct:
            user_exercise.total_correct += 1
            user_exercise.longest_streak = 0 
            value = True
            if not proficient:
                problem_log.earned_proficiency =  \
                            user_exercise.update_proficiency_pe(\
                                          correct = True, \
                                          ubook = user_data.book)
                user_data.earned_proficiency(exercise.id)
                user_data.save()
        problem_log.save()
        user_exercise.save()
        if (proficient or problem_log.earned_proficiency): # and required:
            update_module_proficiency(user_data, module, \
                                                 user_exercise.exercise)
        return user_exercise, value
Esempio n. 2
0
def attempt_problem_pe(user_data, user_exercise, attempt_number, submit_time,
                       time_taken, threshold, score, module, ip_address):
    """
    Stores data related to a PE exercise attempt
    """

    if user_exercise:  # and user_exercise.belongs_to(user_data):
        dt_now = date_from_timestamp(submit_time)  #datetime.datetime.now()
        exercise = user_exercise.exercise
        user_exercise.last_done = dt_now
        count_hints = 0
        # Build up problem log
        problem_log = UserExerciseLog(
            user=user_data.user,
            exercise=user_exercise.exercise,
            time_taken=int(round(int(time_taken) / 1000)),
            time_done=dt_now,
            count_hints=count_hints,
            hint_used=int(count_hints) > 0,
            correct=score >= threshold,
            count_attempts=attempt_number,
            ip_address=ip_address,
        )

        #update list of started exercises
        if not user_data.has_started(exercise):
            user_data.started(exercise.id)

        #just_earned_proficiency = False

        user_exercise.total_done += 1
        value = False
        proficient = user_data.is_proficient_at(user_exercise.exercise)
        if problem_log.correct:
            user_exercise.total_correct += 1
            user_exercise.longest_streak = 0
            value = True
            if not proficient:
                problem_log.earned_proficiency =  \
                            user_exercise.update_proficiency_pe(\
                                          correct = True, \
                                          ubook = user_data.book)
                user_data.earned_proficiency(exercise.id)
                user_data.save()
        problem_log.save()
        user_exercise.save()
        if (proficient or problem_log.earned_proficiency):  # and required:
            update_module_proficiency(user_data, module, \
                                                 user_exercise.exercise)
        return user_exercise, value
Esempio n. 3
0
def attempt_problem(user_data, user_exercise, attempt_number,
    completed, count_hints, time_taken, attempt_content, module,   
    ex_question, ip_address):
    """
    Stores data related to a KA exercise attempt
    """

    if user_exercise:   # and user_exercise.belongs_to(user_data):
        dt_now = datetime.datetime.now()
        #exercise = user_exercise.exercise
        user_exercise.last_done = dt_now
        # Build up problem log for deferred put
        problem_log = UserExerciseLog(
                user=user_data.user,
                exercise=user_exercise.exercise,
                time_taken=time_taken,
                time_done=dt_now,
                count_hints=count_hints,
                hint_used=int(count_hints) > 0,
                correct=str2bool(completed) and (int(count_hints)==0) \
                                            and (int(attempt_number) == 1),
                count_attempts=attempt_number,
                ex_question=ex_question,
                ip_address=ip_address,
        )


        first_response = (attempt_number == 1 and count_hints == 0) or \
                         (count_hints == 1 and attempt_number == 0)

        #if user_exercise.total_done > 0 and user_exercise.streak == 0 \
        #                                and first_response:
            #bingo('hints_keep_going_after_wrong')

        #just_earned_proficiency = False
        #update list of started exercises
        if not user_data.has_started(user_exercise.exercise):
            user_data.started(user_exercise.exercise.id)

        proficient = user_data.is_proficient_at(user_exercise.exercise)
        if str2bool(completed):

            user_exercise.total_done += 1
            if problem_log.correct:

                # Streak only increments if problem was 
                #solved correctly (on first attempt)
                user_exercise.total_correct += 1
                user_exercise.streak += 1
                user_exercise.longest_streak = max(\
                                               user_exercise.longest_streak, \
                                               user_exercise.streak)
                user_exercise.progress = Decimal(user_exercise.streak)/\
                                         Decimal(user_exercise.exercise.streak)
                if not proficient:
                    problem_log.earned_proficiency = \
                         user_exercise.update_proficiency_ka(\
                                  correct = True, \
                                  ubook = user_data.book)
                    if user_exercise.progress >= 1:
                        if len(user_data.all_proficient_exercises) == 0:
                            user_data.all_proficient_exercises += \
                                         "%s" % user_exercise.exercise.id
                        else:
                            user_data.all_proficient_exercises += \
                                        ",%s" % user_exercise.exercise.id
            else:
                user_exercise.progress = Decimal(user_exercise.streak)/\
                                         Decimal(user_exercise.exercise.streak)
        else:
            if (int(count_hints) ==0) and (attempt_content!='hint') \
                                      and (int(attempt_number) == 1):
            # Only count wrong answer at most once per problem
                if user_exercise.streak - 1 > 0:
                    user_exercise.streak = user_exercise.streak - 1
                else:
                    user_exercise.streak = 0
            user_exercise.progress = Decimal(user_exercise.streak)/\
                                     Decimal(user_exercise.exercise.streak)
            if first_response:
                user_exercise.update_proficiency_model(correct=False)

        problem_log.save()
        user_exercise.save()
        user_data.save()
        if proficient or problem_log.earned_proficiency:
            update_module_proficiency(user_data, \
                                      module, \
                                      user_exercise.exercise)
        return user_exercise, True      #, user_exercise_graph, goals_updated
Esempio n. 4
0
def attempt_problem(user_data, user_exercise, attempt_number, completed,
                    count_hints, time_taken, attempt_content, module,
                    ex_question, ip_address):
    """
    Stores data related to a KA exercise attempt
    """

    if user_exercise:  # and user_exercise.belongs_to(user_data):
        dt_now = datetime.datetime.now()
        #exercise = user_exercise.exercise
        user_exercise.last_done = dt_now
        # Build up problem log for deferred put
        problem_log = UserExerciseLog(
                user=user_data.user,
                exercise=user_exercise.exercise,
                time_taken=time_taken,
                time_done=dt_now,
                count_hints=count_hints,
                hint_used=int(count_hints) > 0,
                correct=str2bool(completed) and (int(count_hints)==0) \
                                            and (int(attempt_number) == 1),
                count_attempts=attempt_number,
                ex_question=ex_question,
                ip_address=ip_address,
        )


        first_response = (attempt_number == 1 and count_hints == 0) or \
                         (count_hints == 1 and attempt_number == 0)

        #if user_exercise.total_done > 0 and user_exercise.streak == 0 \
        #                                and first_response:
        #bingo('hints_keep_going_after_wrong')

        #just_earned_proficiency = False
        #update list of started exercises
        if not user_data.has_started(user_exercise.exercise):
            user_data.started(user_exercise.exercise.id)

        proficient = user_data.is_proficient_at(user_exercise.exercise)
        if str2bool(completed):

            user_exercise.total_done += 1
            if problem_log.correct:

                # Streak only increments if problem was
                #solved correctly (on first attempt)
                user_exercise.total_correct += 1
                user_exercise.streak += 1
                user_exercise.longest_streak = max(\
                                               user_exercise.longest_streak, \
                                               user_exercise.streak)
                user_exercise.progress = Decimal(user_exercise.streak)/\
                                         Decimal(user_exercise.exercise.streak)
                if not proficient:
                    problem_log.earned_proficiency = \
                         user_exercise.update_proficiency_ka(\
                                  correct = True, \
                                  ubook = user_data.book)
                    if user_exercise.progress >= 1:
                        if len(user_data.all_proficient_exercises) == 0:
                            user_data.all_proficient_exercises += \
                                         "%s" % user_exercise.exercise.id
                        else:
                            user_data.all_proficient_exercises += \
                                        ",%s" % user_exercise.exercise.id
            else:
                user_exercise.progress = Decimal(user_exercise.streak)/\
                                         Decimal(user_exercise.exercise.streak)
        else:
            if (int(count_hints) ==0) and (attempt_content!='hint') \
                                      and (int(attempt_number) == 1):
                # Only count wrong answer at most once per problem
                if user_exercise.streak - 1 > 0:
                    user_exercise.streak = user_exercise.streak - 1
                else:
                    user_exercise.streak = 0
            user_exercise.progress = Decimal(user_exercise.streak)/\
                                     Decimal(user_exercise.exercise.streak)
            if first_response:
                user_exercise.update_proficiency_model(correct=False)

        problem_log.save()
        user_exercise.save()
        user_data.save()
        if proficient or problem_log.earned_proficiency:
            update_module_proficiency(user_data, \
                                      module, \
                                      user_exercise.exercise)
        return user_exercise, True  #, user_exercise_graph, goals_updated
Esempio n. 5
0
def attempt_problem(user_data, user_exercise, attempt_number,completed, count_hints, time_taken, attempt_content, module,ex_question, ip_address, request_type=None):
    """
    Stores data related to a KA exercise attempt
    """

    if user_exercise:   # and user_exercise.belongs_to(user_data):
        dt_now = datetime.datetime.now()
        #exercise = user_exercise.exercise
        user_exercise.last_done = dt_now

        correct = str2bool(completed) and (int(count_hints)==0) and (int(attempt_number) == 1)

        if "Summ" in user_exercise.exercise.name:
            correct = correct and (user_exercise.hinted_exercise != ex_question)

        # Build up problem log for deferred put
        problem_log = UserExerciseLog(
                user=user_data.user,
                exercise=user_exercise.exercise,
                time_taken=time_taken,
                time_done=dt_now,
                count_hints=count_hints,
                hint_used=int(count_hints) > 0,
                correct=correct,
                count_attempts=attempt_number,
                ex_question=ex_question,
                ip_address=ip_address,
                request_type=request_type)


        first_response = (attempt_number == 1 and count_hints == 0) or \
                         (attempt_number == 0 and count_hints == 1)

        #if user_exercise.total_done > 0 and user_exercise.streak == 0 \
        #                                and first_response:
            #bingo('hints_keep_going_after_wrong')

        #just_earned_proficiency = False
        #update list of started exercises
        if not user_data.has_started(user_exercise.exercise):
            user_data.started(user_exercise.exercise.id)

        proficient = user_data.is_proficient_at(user_exercise.exercise)
        if str2bool(completed):
            user_exercise.total_done += 1
            if problem_log.correct:

                # Streak only increments if problem was
                # solved correctly (on first attempt)
                user_exercise.total_correct += 1
                user_exercise.streak += 1
                user_exercise.longest_streak = max(user_exercise.longest_streak, user_exercise.streak)
                user_exercise.progress = Decimal(user_exercise.streak) / Decimal(user_exercise.exercise.streak)
                if not proficient:
                    problem_log.earned_proficiency = user_exercise.update_proficiency_ka(correct = True,  ubook = user_data.book)
                    if user_exercise.progress >= 1:
                        if len(user_data.all_proficient_exercises) == 0:
                            user_data.all_proficient_exercises += "%s" % user_exercise.exercise.id
                        else:
                            user_data.all_proficient_exercises += ",%s" % user_exercise.exercise.id
                # save exercise_name so that the client framework won't show it again
                if len(user_exercise.correct_exercises) == 0:
                    user_exercise.correct_exercises += '%s' % ex_question
                else:
                    user_exercise.correct_exercises += ',%s' % ex_question

            else:
                user_exercise.progress = Decimal(user_exercise.streak) / Decimal(user_exercise.exercise.streak)

            # when student answer an exercise correctly from first time then clear the hint
            if request_type != 'hint':
                user_exercise.hinted_exercise = ''
        else:
            if (int(count_hints) == 0) and (attempt_content!='hint') \
                                      and (int(attempt_number) == 1):
                # Only count wrong answer at most once per problem
                if user_exercise.streak - 1 > 0:
                    user_exercise.streak = user_exercise.streak - 1
                else:
                    user_exercise.streak = 0
            user_exercise.progress = Decimal(user_exercise.streak) / Decimal(user_exercise.exercise.streak)
            if first_response:
                user_exercise.update_proficiency_model(correct=False)

        # save exercise_name to hinted_exercise so that student won't get credit if he saw the hint then refresh the page
        if request_type == 'hint' and "Summ" in user_exercise.exercise.name:
            user_exercise.hinted_exercise = '%s' % ex_question

        problem_log.save()
        user_exercise.save()
        user_data.save()
        if proficient or problem_log.earned_proficiency:
            update_module_proficiency(user_data, \
                                      module, \
                                      user_exercise.exercise)
        return user_exercise, True      #, user_exercise_graph, goals_updated