Beispiel #1
0
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))
Beispiel #2
0
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))
Beispiel #3
0
	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:
Beispiel #4
0
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
Beispiel #5
0
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
Beispiel #6
0
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))
Beispiel #7
0
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
Beispiel #8
0
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))
Beispiel #9
0
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
Beispiel #10
0
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))
Beispiel #11
0
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))
Beispiel #12
0
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
Beispiel #13
0
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