def explore_drafts(request): title = 'drafts' module_sort_list = None module_sort_list = get_attribute_value(group_id, 'items_sort_list') context_variable = { 'title': title, 'group_id': group_id, 'groupid': group_id, } if module_sort_list: modules_cur = map(Node,module_sort_list) context_variable.update({'modules_is_cur': False}) else: modules_cur = node_collection.find({'member_of': gst_module_id ,'status':'PUBLISHED'}).sort('last_update', -1) context_variable.update({'modules_is_cur': True}) module_unit_ids = [val for each_module in modules_cur for val in each_module.collection_set ] gstaff_access = check_is_gstaff(group_id,request.user) draft_query = {'member_of': gst_base_unit_id, '_id': {'$nin': module_unit_ids}, 'status':'PUBLISHED', } if not gstaff_access: draft_query.update({'$or': [ {'created_by': request.user.id}, {'group_admin': request.user.id}, {'author_set': request.user.id}, # No check on group-type PUBLIC for DraftUnits. # {'group_type': 'PUBLIC'} ]}) base_unit_cur = node_collection.find(draft_query).sort('last_update', -1) # print "\nbase: ", base_unit_cur.count() ''' base_unit_cur = node_collection.find({'member_of': gst_base_unit_id, '_id': {'$nin': module_unit_ids}, 'status':'PUBLISHED', '$or': [ {'created_by': request.user.id}, {'group_admin': request.user.id}, {'author_set': request.user.id}, # {'group_type': 'PUBLIC'} ]}).sort('last_update', -1) ''' # base_unit_page_cur = paginator.Paginator(base_unit_cur, page_no, GSTUDIO_NO_OF_OBJS_PP) # base_unit_page_cur = paginator.Paginator(base_unit_cur, page_no, GSTUDIO_NO_OF_OBJS_PP) context_variable.update({'modules_cur': modules_cur,'units_cur': base_unit_cur}) return render_to_response( # "ndf/explore.html", changed as per new Clix UI "ndf/explore_2017.html", # "ndf/lms_explore.html", context_variable, context_instance=RequestContext(request))
node_obj = Group.get_group_name_id(gr_name,get_obj=True) subject_groups.update({node_obj.name: node_obj}) def update_field(node_obj, attr, field_name, advanced=False): if attr in subject_groups.keys(): if subject_groups[attr] not in node_obj[field_name]: node_obj[field_name].append(subject_groups[attr]._id) if advanced and node_obj._id not in subject_groups[attr].post_node: subject_groups[attr].post_node.append(node_obj._id) subject_groups[attr].save() # Updating Modules module_cur = node_collection.find({'member_of': gst_module_id}) for each_module in module_cur: print "\n Updating group_set of: ", each_module.name module_attr_value = get_attribute_value(each_module._id,"educationalsubject") if isinstance(module_attr_value, list): for each_attr in module_attr_value: update_field(each_module, each_attr, field_name='group_set') else: update_field(each_module, module_attr_value, field_name='group_set') each_module.save() # Updating Units unit_cur = node_collection.find({'member_of': {'$in': [gst_announced_unit_id, gst_base_unit_id]}}) for each_unit in unit_cur: print "\n Updating Unit: ", each_unit.name unit_attr_value = get_attribute_value(each_unit._id,"educationalsubject") if isinstance(unit_attr_value, list): for each_attr in unit_attr_value:
def save_quizitem_response(user_id, quiz_type_val, user_action, user_given_ans, thread_obj, node_obj, group_id, qip_gst, curr_datetime): try: new_list = [] old_submitted_ans = None user_ans = None user_name = User.objects.get(pk=int(user_id)).username 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(node_id=already_ans_obj._id,attr_name="quizitempost_user_submitted_ans", get_data_type=False, use_cache=False) # 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 user_ans and (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) user_ans.reload() 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) thread_obj.reload() if user_given_ans and user_ans: if quiz_type_val == "Short-Response": if already_ans_obj: old_submitted_ans = get_attribute_value(node_id=user_ans._id, attr_name="quizitempost_user_submitted_ans", get_data_type=False, use_cache=False) #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) else: if user_given_ans: if user_action == "check": if already_ans_obj: old_checked_ans = get_attribute_value(node_id=user_ans._id, attr_name="quizitempost_user_checked_ans", get_data_type=False, use_cache=False) #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(node_id=user_ans._id, attr_name="quizitempost_user_submitted_ans", get_data_type=False, use_cache=False) #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 # must returnL user_ans, already_ans_obj # print "\nold_submitted_ans: ",old_submitted_ans # print "\nuser_ans: ", user_ans # print "\nnew_list: ", new_list except Exception as save_quizitem_response_err: pass print "\nError occurred in save_quizitem_response(). ", save_quizitem_response_err return old_submitted_ans, user_ans, new_list
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 module_detail(request, group_id, node_id, title=""): ''' detail of of selected module ''' group_name, group_id = Group.get_group_name_id(group_id) print "in module_detail and group id, title", group_id, title print "node_id", node_id module_obj = Node.get_node_by_id(ObjectId(node_id)) context_variable = { 'group_id': group_id, 'groupid': group_id, 'node': module_obj, 'title': title, 'card': 'ndf/event_card.html', 'card_url_name': 'groupchange' } # module_detail_query = {'member_of': gst_base_unit_id, # '_id': {'$nin': module_unit_ids}, # 'status':'PUBLISHED', # } # if not gstaff_access: # module_detail_query.update({'$or': [ # {'created_by': request.user.id}, # {'group_admin': request.user.id}, # {'author_set': request.user.id}, # # No check on group-type PUBLIC for DraftUnits. # # {'group_type': 'PUBLIC'} # ]}) gstaff_access = check_is_gstaff(group_id, request.user) module_detail_query = { '_id': { '$in': module_obj.collection_set }, 'status': 'PUBLISHED' } ''' if not gstaff_access: module_detail_query.update({'$or': [ {'$and': [ {'member_of': gst_base_unit_id}, {'$or': [ {'created_by': request.user.id}, {'group_admin': request.user.id}, {'author_set': request.user.id}, ]} ]}, {'member_of': gst_announced_unit_id} ]}) ''' primary_lang_tuple = get_language_tuple(GSTUDIO_PRIMARY_COURSE_LANGUAGE) if title == "courses": # module_detail_query.update({'$or': [ # {'$and': [ # {'member_of': {'$in': [gst_announced_unit_id, gst_ce_id]}}, # {'$or': [ # {'created_by': request.user.id}, # {'group_admin': request.user.id}, # {'author_set': request.user.id}, # { # '$and': [ # {'group_type': u'PUBLIC'}, # {'language': primary_lang_tuple}, # ] # }, # ]} # ]}, # #{'member_of': gst_announced_unit_id } # ]}) # # # above can be delete after robust testing of following new query: module_detail_query.update({ 'status': 'PUBLISHED', '$or': [{ 'group_admin': request.user.id }, { 'created_by': request.user.id }, { 'author_set': request.user.id }, { 'member_of': gst_announced_unit_id }, { 'language': primary_lang_tuple, 'group_type': u'PUBLIC', 'member_of': gst_ce_id }] }) if title == "drafts": module_detail_query.update({ '$or': [ { '$and': [{ 'member_of': gst_base_unit_id }, { '$or': [ { 'created_by': request.user.id }, { 'group_admin': request.user.id }, { 'author_set': request.user.id }, ] }] }, ] }) # units_under_module = Node.get_nodes_by_ids_list(module_obj.collection_set) ''' gstaff_access = check_is_gstaff(group_id, request.user) if gstaff_access: module_detail_query.update({'member_of': {'$in': [gst_announced_unit_id, gst_base_unit_id]}}) else: module_detail_query.update({'member_of': gst_announced_unit_id}) ''' units_under_module = node_collection.find(module_detail_query).sort( 'last_update', -1) context_variable.update({'units_under_module': units_under_module}) units_sort_list = get_attribute_value(node_id, 'items_sort_list') from django.core.cache import cache test = cache.get('5945db6e2c4796014abd1784attribute_valueitems_sort_list') print "test:", test if units_sort_list: #print "from attribute:",units_sort_list context_variable.update({'units_sort_list': units_sort_list}) else: print "no items_sort_list" context_variable.update({'units_sort_list': list(units_under_module)}) template = 'ndf/module_detail.html' print "units of selected module", units_sort_list return render_to_response(template, context_variable, context_instance=RequestContext(request))
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 ''' 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 explore_courses(request): # this will be announced tab title = 'courses' context_variable = { 'title': title, 'group_id': group_id, 'groupid': group_id, } module_sort_list = get_attribute_value(group_id, 'items_sort_list') if module_sort_list: modules_cur = map(Node,module_sort_list) context_variable.update({'modules_is_cur': False}) else: modules_cur = node_collection.find({'member_of': gst_module_id ,'status':'PUBLISHED'}).sort('last_update', -1) context_variable.update({'modules_is_cur': True}) module_unit_ids = [val for each_module in modules_cur for val in each_module.collection_set ] primary_lang_tuple = get_language_tuple(GSTUDIO_PRIMARY_COURSE_LANGUAGE) ''' katkamrachana - 14June2017 About following query: [A]. Finding CourseEventGroup instances(First $and in $or): Find CourseEventGroup instances, that are published. Get courses that are linked to the request.user Also find courses, that are "PUBLIC AND LANGUAGE falls under GSTUDIO_PRIMARY_COURSE_LANGUAGE" Hence, Apply language constraint. Introduced to display concerned course for i2c(in 3 languages) [B]. Finding announced_unit instances(Second $and in $or): Find announced_unit instances, that are published. Get courses that are linked to the request.user Also find courses, that are "PUBLIC" No check on language [C]. Check using _type field in case conditions A and B fail, only Groups are to be listed and not GSystems [D]. Check using name field in case conditions A and B fail, executing condition C then do not display factory Groups. ''' base_unit_cur = node_collection.find({ '$or': [ { '$and': [ {'member_of': ce_gst._id}, {'status':'PUBLISHED'}, {'$or': [ {'created_by': request.user.id}, {'group_admin': request.user.id}, {'author_set': request.user.id}, { '$and': [ {'group_type': 'PUBLIC'}, {'language': primary_lang_tuple}, ] } ] } ] }, { '$and': [ {'member_of': announced_unit_gst._id}, {'status':'PUBLISHED'}, {'$or': [ {'created_by': request.user.id}, {'group_admin': request.user.id}, {'author_set': request.user.id}, {'group_type': 'PUBLIC'} ] } ] } ], '_type': 'Group', 'name': {'$nin': GSTUDIO_DEFAULT_GROUPS_LIST}, '_id': {'$nin': module_unit_ids}, }).sort('last_update', -1) # base_unit_page_cur = paginator.Paginator(base_unit_cur, page_no, GSTUDIO_NO_OF_OBJS_PP) context_variable.update({'modules_cur': modules_cur,'units_cur': base_unit_cur}) return render_to_response( # "ndf/explore.html", changed as per new Clix UI "ndf/explore_2017.html", # "ndf/lms_explore.html", context_variable, context_instance=RequestContext(request))
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 ''' 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 explore_courses(request): # this will be announced tab title = 'courses' context_variable = { 'title': title, 'group_id': group_id, 'groupid': group_id, } module_sort_list = get_attribute_value(group_id, 'items_sort_list') if module_sort_list: modules_cur = map(Node, module_sort_list) context_variable.update({'modules_is_cur': False}) else: modules_cur = node_collection.find({ 'member_of': gst_module_id, 'status': 'PUBLISHED' }).sort('last_update', -1) context_variable.update({'modules_is_cur': True}) module_unit_ids = [ val for each_module in modules_cur for val in each_module.collection_set ] primary_lang_tuple = get_language_tuple(GSTUDIO_PRIMARY_COURSE_LANGUAGE) ''' katkamrachana - 14June2017 About following query: [A]. Finding CourseEventGroup instances(First $and in $or): Find CourseEventGroup instances, that are published. Get courses that are linked to the request.user Also find courses, that are "PUBLIC AND LANGUAGE falls under GSTUDIO_PRIMARY_COURSE_LANGUAGE" Hence, Apply language constraint. Introduced to display concerned course for i2c(in 3 languages) [B]. Finding announced_unit instances(Second $and in $or): Find announced_unit instances, that are published. Get courses that are linked to the request.user Also find courses, that are "PUBLIC" No check on language [C]. Check using _type field in case conditions A and B fail, only Groups are to be listed and not GSystems [D]. Check using name field in case conditions A and B fail, executing condition C then do not display factory Groups. ''' base_unit_cur = node_collection.find({ '$or': [{ '$and': [{ 'member_of': ce_gst._id }, { 'status': 'PUBLISHED' }, { '$or': [{ 'created_by': request.user.id }, { 'group_admin': request.user.id }, { 'author_set': request.user.id }, { '$and': [ { 'group_type': 'PUBLIC' }, { 'language': primary_lang_tuple }, ] }] }] }, { '$and': [{ 'member_of': announced_unit_gst._id }, { 'status': 'PUBLISHED' }, { '$or': [{ 'created_by': request.user.id }, { 'group_admin': request.user.id }, { 'author_set': request.user.id }, { 'group_type': 'PUBLIC' }] }] }], '_type': 'Group', 'name': { '$nin': GSTUDIO_DEFAULT_GROUPS_LIST }, '_id': { '$nin': module_unit_ids }, }).sort('last_update', -1) # base_unit_page_cur = paginator.Paginator(base_unit_cur, page_no, GSTUDIO_NO_OF_OBJS_PP) context_variable.update({ 'modules_cur': modules_cur, 'units_cur': base_unit_cur }) return render_to_response( # "ndf/explore.html", changed as per new Clix UI "ndf/explore_2017.html", # "ndf/lms_explore.html", context_variable, context_instance=RequestContext(request))
def module_detail(request, group_id, node_id,title=""): ''' detail of of selected module ''' group_name, group_id = Group.get_group_name_id(group_id) module_obj = Node.get_node_by_id(ObjectId(node_id)) context_variable = { 'group_id': group_id, 'groupid': group_id, 'node': module_obj, 'title': title, 'card': 'ndf/event_card.html', 'card_url_name': 'groupchange' } # module_detail_query = {'member_of': gst_base_unit_id, # '_id': {'$nin': module_unit_ids}, # 'status':'PUBLISHED', # } # if not gstaff_access: # module_detail_query.update({'$or': [ # {'created_by': request.user.id}, # {'group_admin': request.user.id}, # {'author_set': request.user.id}, # # No check on group-type PUBLIC for DraftUnits. # # {'group_type': 'PUBLIC'} # ]}) gstaff_access = check_is_gstaff(group_id,request.user) module_detail_query = {'_id': {'$in': module_obj.collection_set}, 'status':'PUBLISHED' } ''' if not gstaff_access: module_detail_query.update({'$or': [ {'$and': [ {'member_of': gst_base_unit_id}, {'$or': [ {'created_by': request.user.id}, {'group_admin': request.user.id}, {'author_set': request.user.id}, ]} ]}, {'member_of': gst_announced_unit_id} ]}) ''' primary_lang_tuple = get_language_tuple(GSTUDIO_PRIMARY_COURSE_LANGUAGE) if title == "courses": module_detail_query.update({'$or': [ {'$and': [ {'member_of': {'$in': [gst_announced_unit_id, gst_ce_id]}}, {'$or': [ {'created_by': request.user.id}, {'group_admin': request.user.id}, {'author_set': request.user.id}, { '$and': [ {'group_type': u'PUBLIC'}, {'language': primary_lang_tuple}, ] }, ]} ]}, #{'member_of': gst_announced_unit_id } ]}) if title == "drafts": module_detail_query.update({'$or': [ {'$and': [ {'member_of': gst_base_unit_id}, {'$or': [ {'created_by': request.user.id}, {'group_admin': request.user.id}, {'author_set': request.user.id}, ]} ]}, ]}) # units_under_module = Node.get_nodes_by_ids_list(module_obj.collection_set) ''' gstaff_access = check_is_gstaff(group_id, request.user) if gstaff_access: module_detail_query.update({'member_of': {'$in': [gst_announced_unit_id, gst_base_unit_id]}}) else: module_detail_query.update({'member_of': gst_announced_unit_id}) ''' units_under_module = node_collection.find(module_detail_query).sort('last_update', -1) context_variable.update({'units_under_module': units_under_module}) units_sort_list = get_attribute_value(node_id, 'items_sort_list') if units_sort_list: context_variable.update({'units_sort_list': units_sort_list}) else: context_variable.update({'units_sort_list': list(units_under_module)}) template = 'ndf/module_detail.html' return render_to_response( template, context_variable, context_instance=RequestContext(request))
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 # group_obj = node_collection.one({'_id': ObjectId(group_id)}) new_list = [] user_given_ans = request.POST.getlist("user_given_ans[]", '') node_id = request.POST.get("node", '') # print "\n\n user_give_ans",user_given_ans node_obj = node_collection.one({'_id': ObjectId(node_id)}) thread_obj = user_ans = None 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 # grel_dict = get_relation_value(node_obj._id,"has_thread") # is_cursor = grel_dict.get("cursor",False) # print "\n\n is_cursor === ",is_cursor # if is_cursor: # thread_obj = grel_dict.get("grel_node") # thread_grel = grel_dict.get("grel_id") 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 = 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: # 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") # 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 != "": 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 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 # group_obj = node_collection.one({'_id': ObjectId(group_id)}) new_list = [] user_given_ans = request.POST.getlist("user_given_ans[]", '') node_id = request.POST.get("node", '') # print "\n\n user_give_ans",user_given_ans 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 ''' 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 = 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: # 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") # 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 != "": 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 return HttpResponse(json.dumps(response_dict)) except Exception as e: print "\n Something went wrong while saving quiz answer!!! ", str(e) return response_dict