def create_discussion(request, group_id, node_id): ''' Method to create discussion thread for File and Page. ''' try: try: group_id = ObjectId(group_id) except: group_name, group_id = get_group_name_id(group_id) twist_st = node_collection.one({'_type':'GSystemType', 'name':'Twist'}) node = node_collection.one({'_id': ObjectId(node_id)}) thread = None if "Twist" in node.member_of_names_list: thread = node if not thread: thread = get_thread_node(node_id) # thread_id = get_thread_node(node_id) # if thread_id: # thread = node_collection.one({'_id': ObjectId(thread_id)}) # group = node_collection.one({'_id':ObjectId(group_id)}) # thread = node_collection.one({"member_of": ObjectId(twist_st._id),"relation_set.thread_of.0": ObjectId(node._id)}) # print "\n thread is ---", thread # thread = node_collection.one({ "_type": "GSystem", "name": node.name, "member_of": ObjectId(twist_st._id), "prior_node": ObjectId(node_id) }) # the following code will never be executed # not commenting it for now. if not thread: # print "\n\n Creating Thread" thread_obj = create_thread_for_node(request, group_id, node) # print "\n thread_obj===",thread_obj # retriving RelationType # relation_type = node_collection.one({ "_type": "RelationType", "name": u"has_thread", "inverse_name": u"thread_of" }) # Creating thread with the name of node # thread_obj = node_collection.collection.GSystem() # thread_obj.name = unicode(node.name) # thread_obj.status = u"PUBLISHED" # thread_obj.created_by = int(request.user.id) # thread_obj.modified_by = int(request.user.id) # thread_obj.contributors.append(int(request.user.id)) # thread_obj.member_of.append(ObjectId(twist_st._id)) # thread_obj.prior_node.append(ObjectId(node_id)) # thread_obj.group_set.append(ObjectId(group_id)) # thread_obj.save() # print "\n\n Thread id ", thread_obj._id # creating GRelation # create_grelation(node_id, relation_type, twist_st) if thread_obj: response_data = [ "thread-created", str(thread_obj._id) ] return HttpResponse(json.dumps(response_data)) else: # print "\n\n Thread id Thread-exist ", thread._id response_data = [ "Thread-exist", str(thread._id) ] return HttpResponse(json.dumps(response_data)) except Exception as e: error_message = "\n DiscussionThreadCreateError: " + str(e) + "\n" raise Exception(error_message)
def save_quizitem_answer(request, group_id): response_dict = {"success": False} try: if request.is_ajax() and request.method == "POST": try: group_id = ObjectId(group_id) except: group_name, group_id = get_group_name_id(group_id) import datetime recent_ans = None is_user_given_ans_not_in_recent_submitted_ans = False recent_submitted_ans_was_correct = False user_given_ans = request.POST.getlist("user_given_ans[]", '') node_id = request.POST.get("node", '') node_obj = node_collection.one({'_id': ObjectId(node_id)}) user_action = request.POST.get("user_action", '') thread_obj = user_ans = None thread_obj = get_thread_node(node_obj._id) # print "\n thread_obj: ", thread_obj already_ans_obj = already_submitted_ans = None if thread_obj != None: quiz_type_val = get_attribute_value(node_obj._id,"quiz_type") quiz_correct_ans = get_attribute_value(node_obj._id,"correct_answer") quiz_correct_ans = (map(unicode,[re.sub(r'[\r]', '', cor_ans) for cor_ans in quiz_correct_ans])) curr_datetime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") active_user_ids_list = [request.user.id] if GSTUDIO_BUDDY_LOGIN: active_user_ids_list += Buddy.get_buddy_userids_list_within_datetime(request.user.id, datetime.datetime.now()) # removing redundancy of user ids: # active_user_ids_list = dict.fromkeys(active_user_ids_list).keys() # Need quiz_type_val, user-id, thread_obj, group_id, qip_gst._id, curr_datetime for each_user in active_user_ids_list: old_submitted_ans, user_ans, new_list = save_quizitem_response(each_user, quiz_type_val, user_action, user_given_ans, thread_obj, node_obj, group_id, qip_gst, curr_datetime) response_dict['count'] = len(new_list) response_dict['success'] = True if old_submitted_ans: recent_ans = old_submitted_ans[-1].values() if recent_ans: recent_ans = recent_ans[0] is_user_given_ans_not_in_recent_submitted_ans = all(each_usr_given_ans not in recent_ans for each_usr_given_ans in user_given_ans) recent_submitted_ans_was_correct = any(each_submitted_ans in quiz_correct_ans for each_submitted_ans in recent_ans) # print "\n recent_ans == ", recent_ans # print "\n user_given_ans == ", user_given_ans counter_objs_cur = Counter.get_counter_objs_cur(active_user_ids_list, group_id) #code to update counter collection # counter_obj = Counter.get_counter_obj(user_id, group_id) if not already_submitted_ans: # This is the first time to attempt this quizitemevent for userr_each_attr in user_ans.attribute_set: if 'quizitempost_user_submitted_ans' in userr_each_attr: if len(userr_each_attr['quizitempost_user_submitted_ans'])!=0: # counter_obj.no_questions_attempted+=1 for each_counter_obj in counter_objs_cur: each_counter_obj['quiz']['attempted'] += 1 each_counter_obj.save() counter_objs_cur.rewind() for each_user_ans_attr in user_ans.attribute_set: if 'quizitempost_user_submitted_ans' in each_user_ans_attr: if quiz_type_val=='Single-Choice': if len(each_user_ans_attr['quizitempost_user_submitted_ans'])!=0: for each_counter_obj in counter_objs_cur: if cmp(quiz_correct_ans,user_given_ans)==0: # counter_obj.no_correct_answers+=1 if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans: if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj['quiz']['incorrect']: each_counter_obj['quiz']['incorrect'] -= 1 if not recent_submitted_ans_was_correct: each_counter_obj['quiz']['correct'] += 1 each_counter_obj['group_points'] += GSTUDIO_QUIZ_CORRECT_POINTS each_counter_obj.save() else: # each_counter_obj.no_incorrect_answers+=1 if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans: if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj['quiz']['correct']: each_counter_obj['quiz']['correct'] -= 1 if recent_submitted_ans_was_correct: each_counter_obj['quiz']['incorrect'] += 1 each_counter_obj.save() counter_objs_cur.rewind() if quiz_type_val=='Multiple-Choice': if each_user_ans_attr['quizitempost_user_submitted_ans']: search = False user_given_ans = [x.encode('UTF8') for x in user_given_ans] quiz_correct_ans = [x.encode('UTF8') for x in quiz_correct_ans] # print "\n user_given_ans : ", user_given_ans # print "\n quiz_correct_ans: ", quiz_correct_ans # Remove Carriage Return from Python strings ['\r'] in quiz_correct_ans quiz_correct_ans_tmp = [] for each_option in quiz_correct_ans: each_option = each_option.replace('\r','') quiz_correct_ans_tmp.append(each_option) quiz_correct_ans = quiz_correct_ans_tmp for each_user_given_ans in user_given_ans: if each_user_given_ans in quiz_correct_ans: search = True for each_counter_obj in counter_objs_cur: if search==True: try: if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans: if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj['quiz']['incorrect']: each_counter_obj['quiz']['incorrect'] -= 1 if not recent_submitted_ans_was_correct: each_counter_obj['quiz']['correct'] += 1 # each_counter_obj.course_score+=GSTUDIO_QUIZ_CORRECT_POINTS each_counter_obj['group_points'] += GSTUDIO_QUIZ_CORRECT_POINTS each_counter_obj.save() except Exception as rer: print "\n Error ", rer else: # each_counter_obj.no_incorrect_answers+=1 if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans: if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj['quiz']['correct']: each_counter_obj['quiz']['correct'] -= 1 if recent_submitted_ans_was_correct: each_counter_obj['quiz']['incorrect'] += 1 each_counter_obj.save() counter_objs_cur.rewind() if quiz_type_val=='Short-Response': if len(user_given_ans)!=0: # counter_obj.no_correct_answers+=1 for each_counter_obj in counter_objs_cur: if not already_submitted_ans: each_counter_obj['quiz']['correct'] += 1 # each_counter_obj.course_score += GSTUDIO_QUIZ_CORRECT_POINTS each_counter_obj['group_points'] += GSTUDIO_QUIZ_CORRECT_POINTS each_counter_obj.save() #updated counter collection return HttpResponse(json.dumps(response_dict)) except Exception as e: print "\n Something went wrong while saving quiz answer!!! ", str(e) return response_dict
def save_quizitem_answer(request, group_id): response_dict = {"success": False} try: if request.is_ajax() and request.method == "POST": try: group_id = ObjectId(group_id) except: group_name, group_id = get_group_name_id(group_id) import datetime new_list = [] old_submitted_ans = None recent_ans = None is_user_given_ans_not_in_recent_submitted_ans = False recent_submitted_ans_was_correct = False user_given_ans = request.POST.getlist("user_given_ans[]", '') node_id = request.POST.get("node", '') node_obj = node_collection.one({'_id': ObjectId(node_id)}) thread_obj = user_ans = None ''' print "\n\n node_obj::::::::",node_obj.relation_set try: for each_rel in node_obj.relation_set: if each_rel and "has_thread" in each_rel: thread_id = each_rel['has_thread'][0] thread_obj = node_collection.one({'_id': ObjectId(thread_id)}) # print "\n\n thread_obj === ", thread_obj.name , "===" except: pass ''' thread_obj = get_thread_node(node_obj._id) # grel_dict = get_relation_value(node_obj._id,"has_thread", True) # is_cursor = grel_dict.get("cursor",False) # if not is_cursor: # thread_obj = grel_dict.get("grel_node") # # print "\n thread_obj: ", thread_obj user_action = request.POST.get("user_action", '') user_id = int(request.user.id) user_name = unicode(request.user.username) qip_gst = node_collection.one({ '_type': 'GSystemType', 'name': 'QuizItemPost' }) qip_user_submitted_ans_AT = node_collection.one({ '_type': "AttributeType", 'name': "quizitempost_user_submitted_ans" }) qip_user_checked_ans_AT = node_collection.one({ '_type': "AttributeType", 'name': "quizitempost_user_checked_ans" }) already_ans_obj = already_submitted_ans = None # print "\n\n thread_obj == ", thread_obj if thread_obj != None: already_ans_obj = node_collection.find_one({ 'member_of': qip_gst._id, 'created_by': user_id, 'prior_node': thread_obj._id }) if already_ans_obj: already_submitted_ans = get_attribute_value( already_ans_obj._id, "quizitempost_user_submitted_ans") # print "\n already_submitted_ans == ", already_submitted_ans # check whether user has already checked or submitted ans user_ans = already_ans_obj else: user_ans = node_collection.collection.GSystem() user_ans.created_by = user_id user_ans.modified_by = user_id user_ans.contributors.append(user_id) user_ans.member_of.append(qip_gst._id) user_ans.group_set.append(group_id) if node_obj._id not in user_ans.prior_node: user_ans.prior_node.append(node_obj._id) user_ans.origin = [{ 'thread_id': thread_obj._id, 'prior_node_id_of_thread': node_obj._id }] user_ans.status = u"PUBLISHED" user_ans.name = unicode("Answer_of:" + str(node_obj.name) + "-Answer_by:" + str(user_name)) user_ans.save() # print "\n\n user_ans== ",user_ans if user_id not in thread_obj.author_set: thread_obj.author_set.append(user_id) thread_obj.save() # print "\n thread_obj.author_set",thread_obj.author_set if thread_obj._id not in user_ans.prior_node: # add user's post/reply obj to thread obj's post_node node_collection.collection.update( {'_id': user_ans._id}, {'$push': { 'prior_node': thread_obj._id }}, upsert=False, multi=False) if user_ans._id not in thread_obj.post_node: # add thread obj to user's post/reply prior_node node_collection.collection.update( {'_id': thread_obj._id}, {'$push': { 'post_node': user_ans._id }}, upsert=False, multi=False) quiz_type_val = get_attribute_value(node_obj._id, "quiz_type") quiz_correct_ans = get_attribute_value(node_obj._id, "correct_answer") # print "\n quiz_type_val: ", quiz_type_val # print "\n quiz_correct_ans: ", quiz_correct_ans # print "\n user_given_ans: ",user_given_ans quiz_correct_ans = (map(unicode, [ re.sub(r'[\r]', '', cor_ans) for cor_ans in quiz_correct_ans ])) # print "\n get_attribute_value--", get_attribute_value if user_given_ans and user_ans: if quiz_type_val == "Short-Response": create_gattribute(user_ans._id, qip_user_submitted_ans_AT, user_given_ans) else: curr_datetime = datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S") if user_given_ans: if user_action == "check": if already_ans_obj: old_checked_ans = get_attribute_value( user_ans._id, "quizitempost_user_checked_ans") if old_checked_ans != "None" and old_checked_ans != "": new_list = old_checked_ans new_list.append( {str(curr_datetime): user_given_ans}) if new_list: create_gattribute(user_ans._id, qip_user_checked_ans_AT, new_list) elif user_action == "submit": if already_ans_obj: old_submitted_ans = get_attribute_value( user_ans._id, "quizitempost_user_submitted_ans") if old_submitted_ans != "None" and old_submitted_ans != "" and old_submitted_ans: new_list = old_submitted_ans new_list.append( {str(curr_datetime): user_given_ans}) if new_list: create_gattribute( user_ans._id, qip_user_submitted_ans_AT, new_list) user_ans.reload() # print "\n user_ans.attribute_set",user_ans.attribute_set response_dict['count'] = len(new_list) response_dict['success'] = True active_user_ids_list = [request.user.id] if old_submitted_ans: recent_ans = old_submitted_ans[-1].values() if recent_ans: recent_ans = recent_ans[0] is_user_given_ans_not_in_recent_submitted_ans = all( each_usr_given_ans not in recent_ans for each_usr_given_ans in user_given_ans) recent_submitted_ans_was_correct = any( each_submitted_ans in quiz_correct_ans for each_submitted_ans in recent_ans) # print "\n recent_ans == ", recent_ans # print "\n user_given_ans == ", user_given_ans if GSTUDIO_BUDDY_LOGIN: active_user_ids_list += Buddy.get_buddy_userids_list_within_datetime( request.user.id, datetime.datetime.now()) # removing redundancy of user ids: # active_user_ids_list = dict.fromkeys(active_user_ids_list).keys() counter_objs_cur = Counter.get_counter_objs_cur( active_user_ids_list, group_id) #code to update counter collection # counter_obj = Counter.get_counter_obj(user_id, group_id) if not already_submitted_ans: # This is the first time to attempt this quizitemevent for userr_each_attr in user_ans.attribute_set: if 'quizitempost_user_submitted_ans' in userr_each_attr: if len(userr_each_attr[ 'quizitempost_user_submitted_ans']) != 0: # counter_obj.no_questions_attempted+=1 for each_counter_obj in counter_objs_cur: each_counter_obj['quiz']['attempted'] += 1 each_counter_obj.save() counter_objs_cur.rewind() ''' for each_attr in node_obj.attribute_set: if 'correct_answer' in each_attr: quiz_correct_ans = each_attr['correct_answer'] if 'quiz_type' in each_attr: type_of_quiz = each_attr['quiz_type'] ''' for each_user_ans_attr in user_ans.attribute_set: if 'quizitempost_user_submitted_ans' in each_user_ans_attr: if quiz_type_val == 'Single-Choice': if len(each_user_ans_attr[ 'quizitempost_user_submitted_ans']) != 0: for each_counter_obj in counter_objs_cur: if cmp(quiz_correct_ans, user_given_ans) == 0: # counter_obj.no_correct_answers+=1 if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans: if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj[ 'quiz']['incorrect']: each_counter_obj['quiz'][ 'incorrect'] -= 1 if not recent_submitted_ans_was_correct: each_counter_obj['quiz'][ 'correct'] += 1 each_counter_obj[ 'group_points'] += GSTUDIO_QUIZ_CORRECT_POINTS each_counter_obj.save() else: # each_counter_obj.no_incorrect_answers+=1 if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans: if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj[ 'quiz']['correct']: each_counter_obj['quiz'][ 'correct'] -= 1 if recent_submitted_ans_was_correct: each_counter_obj['quiz'][ 'incorrect'] += 1 each_counter_obj.save() counter_objs_cur.rewind() if quiz_type_val == 'Multiple-Choice': if each_user_ans_attr[ 'quizitempost_user_submitted_ans']: search = False user_given_ans = [ x.encode('UTF8') for x in user_given_ans ] quiz_correct_ans = [ x.encode('UTF8') for x in quiz_correct_ans ] # print "\n user_given_ans : ", user_given_ans # print "\n quiz_correct_ans: ", quiz_correct_ans # Remove Carriage Return from Python strings ['\r'] in quiz_correct_ans quiz_correct_ans_tmp = [] for each_option in quiz_correct_ans: each_option = each_option.replace('\r', '') quiz_correct_ans_tmp.append(each_option) quiz_correct_ans = quiz_correct_ans_tmp for each_user_given_ans in user_given_ans: if each_user_given_ans in quiz_correct_ans: search = True # print "\n search : ", search ''' i=0 while i<len(user_given_ans): try: quiz_correct_ans.index(user_given_ans[i]) search=True i=i+1 except Exception as e1: search=False break ''' for each_counter_obj in counter_objs_cur: if search == True: try: if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans: if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj[ 'quiz']['incorrect']: each_counter_obj['quiz'][ 'incorrect'] -= 1 if not recent_submitted_ans_was_correct: each_counter_obj['quiz'][ 'correct'] += 1 # each_counter_obj.course_score+=GSTUDIO_QUIZ_CORRECT_POINTS each_counter_obj[ 'group_points'] += GSTUDIO_QUIZ_CORRECT_POINTS each_counter_obj.save() except Exception as rer: print "\n Error ", rer else: # each_counter_obj.no_incorrect_answers+=1 if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans: if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj[ 'quiz']['correct']: each_counter_obj['quiz'][ 'correct'] -= 1 if recent_submitted_ans_was_correct: each_counter_obj['quiz'][ 'incorrect'] += 1 each_counter_obj.save() counter_objs_cur.rewind() if quiz_type_val == 'Short-Response': if len(user_given_ans) != 0: # counter_obj.no_correct_answers+=1 for each_counter_obj in counter_objs_cur: if not already_submitted_ans: each_counter_obj['quiz'][ 'correct'] += 1 # each_counter_obj.course_score += GSTUDIO_QUIZ_CORRECT_POINTS each_counter_obj[ 'group_points'] += GSTUDIO_QUIZ_CORRECT_POINTS each_counter_obj.save() #updated counter collection return HttpResponse(json.dumps(response_dict)) except Exception as e: print "\n Something went wrong while saving quiz answer!!! ", str(e) return response_dict
def save_quizitem_answer(request, group_id): response_dict = {"success": False} try: if request.is_ajax() and request.method == "POST": try: group_id = ObjectId(group_id) except: group_name, group_id = get_group_name_id(group_id) import datetime new_list = [] old_submitted_ans = None recent_ans = None is_user_given_ans_not_in_recent_submitted_ans = False recent_submitted_ans_was_correct = False user_given_ans = request.POST.getlist("user_given_ans[]", '') node_id = request.POST.get("node", '') node_obj = node_collection.one({'_id': ObjectId(node_id)}) thread_obj = user_ans = None ''' print "\n\n node_obj::::::::",node_obj.relation_set try: for each_rel in node_obj.relation_set: if each_rel and "has_thread" in each_rel: thread_id = each_rel['has_thread'][0] thread_obj = node_collection.one({'_id': ObjectId(thread_id)}) # print "\n\n thread_obj === ", thread_obj.name , "===" except: pass ''' thread_obj = get_thread_node(node_obj._id) # grel_dict = get_relation_value(node_obj._id,"has_thread", True) # is_cursor = grel_dict.get("cursor",False) # if not is_cursor: # thread_obj = grel_dict.get("grel_node") # # print "\n thread_obj: ", thread_obj user_action = request.POST.get("user_action", '') user_id = int(request.user.id) user_name = unicode(request.user.username) qip_gst = node_collection.one({ '_type': 'GSystemType', 'name': 'QuizItemPost'}) qip_user_submitted_ans_AT = node_collection.one({'_type': "AttributeType", 'name': "quizitempost_user_submitted_ans"}) qip_user_checked_ans_AT = node_collection.one({'_type': "AttributeType", 'name': "quizitempost_user_checked_ans"}) already_ans_obj = already_submitted_ans = None # print "\n\n thread_obj == ", thread_obj if thread_obj != None: already_ans_obj = node_collection.find_one({'member_of': qip_gst._id,'created_by': user_id, 'prior_node': thread_obj._id}) if already_ans_obj: already_submitted_ans = get_attribute_value(already_ans_obj._id,"quizitempost_user_submitted_ans") # print "\n already_submitted_ans == ", already_submitted_ans # check whether user has already checked or submitted ans user_ans = already_ans_obj else: user_ans = node_collection.collection.GSystem() user_ans.created_by = user_id user_ans.modified_by = user_id user_ans.contributors.append(user_id) user_ans.member_of.append(qip_gst._id) user_ans.group_set.append(group_id) if node_obj._id not in user_ans.prior_node: user_ans.prior_node.append(node_obj._id) user_ans.origin = [{'thread_id': thread_obj._id, 'prior_node_id_of_thread': node_obj._id}] user_ans.status = u"PUBLISHED" user_ans.name = unicode("Answer_of:" + str(node_obj.name) + "-Answer_by:"+ str(user_name)) user_ans.save() # print "\n\n user_ans== ",user_ans if user_id not in thread_obj.author_set: thread_obj.author_set.append(user_id) thread_obj.save() # print "\n thread_obj.author_set",thread_obj.author_set if thread_obj._id not in user_ans.prior_node: # add user's post/reply obj to thread obj's post_node node_collection.collection.update({'_id': user_ans._id}, {'$push': {'prior_node':thread_obj._id}},upsert=False,multi=False) if user_ans._id not in thread_obj.post_node: # add thread obj to user's post/reply prior_node node_collection.collection.update({'_id': thread_obj._id}, {'$push': {'post_node':user_ans._id}},upsert=False,multi=False) quiz_type_val = get_attribute_value(node_obj._id,"quiz_type") quiz_correct_ans = get_attribute_value(node_obj._id,"correct_answer") # print "\n quiz_type_val: ", quiz_type_val # print "\n quiz_correct_ans: ", quiz_correct_ans # print "\n user_given_ans: ",user_given_ans quiz_correct_ans = (map(unicode,[re.sub(r'[\r]', '', cor_ans) for cor_ans in quiz_correct_ans])) # print "\n get_attribute_value--", get_attribute_value if user_given_ans and user_ans: if quiz_type_val == "Short-Response": create_gattribute(user_ans._id, qip_user_submitted_ans_AT, user_given_ans) else: curr_datetime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") if user_given_ans: if user_action == "check": if already_ans_obj: old_checked_ans = get_attribute_value(user_ans._id,"quizitempost_user_checked_ans") if old_checked_ans != "None" and old_checked_ans != "": new_list = old_checked_ans new_list.append({str(curr_datetime):user_given_ans}) if new_list: create_gattribute(user_ans._id, qip_user_checked_ans_AT, new_list) elif user_action == "submit": if already_ans_obj: old_submitted_ans = get_attribute_value(user_ans._id,"quizitempost_user_submitted_ans") if old_submitted_ans != "None" and old_submitted_ans != "" and old_submitted_ans: new_list = old_submitted_ans new_list.append({str(curr_datetime):user_given_ans}) if new_list: create_gattribute(user_ans._id, qip_user_submitted_ans_AT, new_list) user_ans.reload() # print "\n user_ans.attribute_set",user_ans.attribute_set response_dict['count'] = len(new_list) response_dict['success'] = True active_user_ids_list = [request.user.id] if old_submitted_ans: recent_ans = old_submitted_ans[-1].values() if recent_ans: recent_ans = recent_ans[0] is_user_given_ans_not_in_recent_submitted_ans = all(each_usr_given_ans not in recent_ans for each_usr_given_ans in user_given_ans) recent_submitted_ans_was_correct = any(each_submitted_ans in quiz_correct_ans for each_submitted_ans in recent_ans) # print "\n recent_ans == ", recent_ans # print "\n user_given_ans == ", user_given_ans if GSTUDIO_BUDDY_LOGIN: active_user_ids_list += Buddy.get_buddy_userids_list_within_datetime(request.user.id, datetime.datetime.now()) # removing redundancy of user ids: # active_user_ids_list = dict.fromkeys(active_user_ids_list).keys() counter_objs_cur = Counter.get_counter_objs_cur(active_user_ids_list, group_id) #code to update counter collection # counter_obj = Counter.get_counter_obj(user_id, group_id) if not already_submitted_ans: # This is the first time to attempt this quizitemevent for userr_each_attr in user_ans.attribute_set: if 'quizitempost_user_submitted_ans' in userr_each_attr: if len(userr_each_attr['quizitempost_user_submitted_ans'])!=0: # counter_obj.no_questions_attempted+=1 for each_counter_obj in counter_objs_cur: each_counter_obj['quiz']['attempted'] += 1 each_counter_obj.save() counter_objs_cur.rewind() ''' for each_attr in node_obj.attribute_set: if 'correct_answer' in each_attr: quiz_correct_ans = each_attr['correct_answer'] if 'quiz_type' in each_attr: type_of_quiz = each_attr['quiz_type'] ''' for each_user_ans_attr in user_ans.attribute_set: if 'quizitempost_user_submitted_ans' in each_user_ans_attr: if quiz_type_val=='Single-Choice': if len(each_user_ans_attr['quizitempost_user_submitted_ans'])!=0: for each_counter_obj in counter_objs_cur: if cmp(quiz_correct_ans,user_given_ans)==0: # counter_obj.no_correct_answers+=1 if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans: if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj['quiz']['incorrect']: each_counter_obj['quiz']['incorrect'] -= 1 if not recent_submitted_ans_was_correct: each_counter_obj['quiz']['correct'] += 1 each_counter_obj['group_points'] += GSTUDIO_QUIZ_CORRECT_POINTS each_counter_obj.save() else: # each_counter_obj.no_incorrect_answers+=1 if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans: if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj['quiz']['correct']: each_counter_obj['quiz']['correct'] -= 1 if recent_submitted_ans_was_correct: each_counter_obj['quiz']['incorrect'] += 1 each_counter_obj.save() counter_objs_cur.rewind() if quiz_type_val=='Multiple-Choice': if each_user_ans_attr['quizitempost_user_submitted_ans']: search = False user_given_ans = [x.encode('UTF8') for x in user_given_ans] quiz_correct_ans = [x.encode('UTF8') for x in quiz_correct_ans] # print "\n user_given_ans : ", user_given_ans # print "\n quiz_correct_ans: ", quiz_correct_ans # Remove Carriage Return from Python strings ['\r'] in quiz_correct_ans quiz_correct_ans_tmp = [] for each_option in quiz_correct_ans: each_option = each_option.replace('\r','') quiz_correct_ans_tmp.append(each_option) quiz_correct_ans = quiz_correct_ans_tmp for each_user_given_ans in user_given_ans: if each_user_given_ans in quiz_correct_ans: search = True # print "\n search : ", search ''' i=0 while i<len(user_given_ans): try: quiz_correct_ans.index(user_given_ans[i]) search=True i=i+1 except Exception as e1: search=False break ''' for each_counter_obj in counter_objs_cur: if search==True: try: if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans: if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj['quiz']['incorrect']: each_counter_obj['quiz']['incorrect'] -= 1 if not recent_submitted_ans_was_correct: each_counter_obj['quiz']['correct'] += 1 # each_counter_obj.course_score+=GSTUDIO_QUIZ_CORRECT_POINTS each_counter_obj['group_points'] += GSTUDIO_QUIZ_CORRECT_POINTS each_counter_obj.save() except Exception as rer: print "\n Error ", rer else: # each_counter_obj.no_incorrect_answers+=1 if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans: if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj['quiz']['correct']: each_counter_obj['quiz']['correct'] -= 1 if recent_submitted_ans_was_correct: each_counter_obj['quiz']['incorrect'] += 1 each_counter_obj.save() counter_objs_cur.rewind() if quiz_type_val=='Short-Response': if len(user_given_ans)!=0: # counter_obj.no_correct_answers+=1 for each_counter_obj in counter_objs_cur: if not already_submitted_ans: each_counter_obj['quiz']['correct'] += 1 # each_counter_obj.course_score += GSTUDIO_QUIZ_CORRECT_POINTS each_counter_obj['group_points'] += GSTUDIO_QUIZ_CORRECT_POINTS each_counter_obj.save() #updated counter collection return HttpResponse(json.dumps(response_dict)) except Exception as e: print "\n Something went wrong while saving quiz answer!!! ", str(e) return response_dict