コード例 #1
0
ファイル: discussion.py プロジェクト: mrunal4/gstudio
def create_discussion(request, group_id, node_id):
  '''
  Method to create discussion thread for File and Page.
  '''

  try:
    try:
        group_id = ObjectId(group_id)
    except:
        group_name, group_id = get_group_name_id(group_id)

    twist_st = node_collection.one({'_type':'GSystemType', 'name':'Twist'})
    node = node_collection.one({'_id': ObjectId(node_id)})
    thread = None

    if "Twist" in node.member_of_names_list:
        thread = node

    if not thread:
        thread = get_thread_node(node_id)
        # thread_id = get_thread_node(node_id)
        # if thread_id:
        #     thread = node_collection.one({'_id': ObjectId(thread_id)})
    # group = node_collection.one({'_id':ObjectId(group_id)})
    # thread = node_collection.one({"member_of": ObjectId(twist_st._id),"relation_set.thread_of.0": ObjectId(node._id)})
    # print "\n thread is ---", thread
    # thread = node_collection.one({ "_type": "GSystem", "name": node.name, "member_of": ObjectId(twist_st._id), "prior_node": ObjectId(node_id) })

    # the following code will never be executed
    # not commenting it for now.
    if not thread:
      # print "\n\n Creating Thread"
      thread_obj = create_thread_for_node(request, group_id, node)
      # print "\n thread_obj===",thread_obj
      # retriving RelationType
      # relation_type = node_collection.one({ "_type": "RelationType", "name": u"has_thread", "inverse_name": u"thread_of" })

      # Creating thread with the name of node
      # thread_obj = node_collection.collection.GSystem()

      # thread_obj.name = unicode(node.name)
      # thread_obj.status = u"PUBLISHED"

      # thread_obj.created_by = int(request.user.id)
      # thread_obj.modified_by = int(request.user.id)
      # thread_obj.contributors.append(int(request.user.id))

      # thread_obj.member_of.append(ObjectId(twist_st._id))
      # thread_obj.prior_node.append(ObjectId(node_id))
      # thread_obj.group_set.append(ObjectId(group_id))

      # thread_obj.save()
      # print "\n\n Thread id ", thread_obj._id
      # creating GRelation
      # create_grelation(node_id, relation_type, twist_st)
      if thread_obj:
          response_data = [ "thread-created", str(thread_obj._id) ]

      return HttpResponse(json.dumps(response_data))

    else:
      # print "\n\n Thread id Thread-exist ", thread._id
      response_data =  [ "Thread-exist", str(thread._id) ]

      return HttpResponse(json.dumps(response_data))

  except Exception as e:

    error_message = "\n DiscussionThreadCreateError: " + str(e) + "\n"
    raise Exception(error_message)
コード例 #2
0
ファイル: quiz.py プロジェクト: sakshi7373/gstudio
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
コード例 #3
0
ファイル: quiz.py プロジェクト: mrunal4/gstudio
def save_quizitem_answer(request, group_id):
    response_dict = {"success": False}
    try:
        if request.is_ajax() and request.method == "POST":
            try:
                group_id = ObjectId(group_id)
            except:
                group_name, group_id = get_group_name_id(group_id)
            import datetime

            new_list = []
            old_submitted_ans = None
            recent_ans = None
            is_user_given_ans_not_in_recent_submitted_ans = False
            recent_submitted_ans_was_correct = False

            user_given_ans = request.POST.getlist("user_given_ans[]", '')
            node_id = request.POST.get("node", '')
            node_obj = node_collection.one({'_id': ObjectId(node_id)})
            thread_obj = user_ans = None
            '''
            print "\n\n node_obj::::::::",node_obj.relation_set
            try:
                for each_rel in node_obj.relation_set:
                    if each_rel and "has_thread" in each_rel:
                        thread_id = each_rel['has_thread'][0]
                        thread_obj = node_collection.one({'_id': ObjectId(thread_id)})
                        # print "\n\n thread_obj === ", thread_obj.name , "==="
            except:
                pass
            '''

            thread_obj = get_thread_node(node_obj._id)
            # grel_dict = get_relation_value(node_obj._id,"has_thread", True)
            # is_cursor = grel_dict.get("cursor",False)
            # if not is_cursor:
            #     thread_obj = grel_dict.get("grel_node")
            #     # print "\n thread_obj: ", thread_obj

            user_action = request.POST.get("user_action", '')

            user_id = int(request.user.id)
            user_name = unicode(request.user.username)
            qip_gst = node_collection.one({
                '_type': 'GSystemType',
                'name': 'QuizItemPost'
            })
            qip_user_submitted_ans_AT = node_collection.one({
                '_type':
                "AttributeType",
                'name':
                "quizitempost_user_submitted_ans"
            })
            qip_user_checked_ans_AT = node_collection.one({
                '_type':
                "AttributeType",
                'name':
                "quizitempost_user_checked_ans"
            })
            already_ans_obj = already_submitted_ans = None
            # print "\n\n thread_obj == ", thread_obj
            if thread_obj != None:
                already_ans_obj = node_collection.find_one({
                    'member_of':
                    qip_gst._id,
                    'created_by':
                    user_id,
                    'prior_node':
                    thread_obj._id
                })

                if already_ans_obj:
                    already_submitted_ans = get_attribute_value(
                        already_ans_obj._id, "quizitempost_user_submitted_ans")
                    # print "\n already_submitted_ans == ", already_submitted_ans
                    # check whether user has already checked or submitted ans
                    user_ans = already_ans_obj
                else:
                    user_ans = node_collection.collection.GSystem()
                    user_ans.created_by = user_id
                    user_ans.modified_by = user_id
                    user_ans.contributors.append(user_id)
                    user_ans.member_of.append(qip_gst._id)
                    user_ans.group_set.append(group_id)
                if node_obj._id not in user_ans.prior_node:
                    user_ans.prior_node.append(node_obj._id)
                user_ans.origin = [{
                    'thread_id': thread_obj._id,
                    'prior_node_id_of_thread': node_obj._id
                }]
                user_ans.status = u"PUBLISHED"
                user_ans.name = unicode("Answer_of:" + str(node_obj.name) +
                                        "-Answer_by:" + str(user_name))
                user_ans.save()
                # print "\n\n user_ans== ",user_ans
                if user_id not in thread_obj.author_set:
                    thread_obj.author_set.append(user_id)
                    thread_obj.save()
                    # print "\n thread_obj.author_set",thread_obj.author_set
                if thread_obj._id not in user_ans.prior_node:
                    # add user's post/reply obj to thread obj's post_node
                    node_collection.collection.update(
                        {'_id': user_ans._id},
                        {'$push': {
                            'prior_node': thread_obj._id
                        }},
                        upsert=False,
                        multi=False)
                if user_ans._id not in thread_obj.post_node:
                    # add thread obj to user's post/reply prior_node
                    node_collection.collection.update(
                        {'_id': thread_obj._id},
                        {'$push': {
                            'post_node': user_ans._id
                        }},
                        upsert=False,
                        multi=False)
                quiz_type_val = get_attribute_value(node_obj._id, "quiz_type")
                quiz_correct_ans = get_attribute_value(node_obj._id,
                                                       "correct_answer")
                # print "\n quiz_type_val: ", quiz_type_val
                # print "\n quiz_correct_ans: ", quiz_correct_ans
                # print "\n user_given_ans: ",user_given_ans
                quiz_correct_ans = (map(unicode, [
                    re.sub(r'[\r]', '', cor_ans)
                    for cor_ans in quiz_correct_ans
                ]))

                # print "\n get_attribute_value--", get_attribute_value
                if user_given_ans and user_ans:
                    if quiz_type_val == "Short-Response":
                        create_gattribute(user_ans._id,
                                          qip_user_submitted_ans_AT,
                                          user_given_ans)
                    else:
                        curr_datetime = datetime.datetime.now().strftime(
                            "%Y-%m-%d %H:%M:%S")
                        if user_given_ans:
                            if user_action == "check":
                                if already_ans_obj:
                                    old_checked_ans = get_attribute_value(
                                        user_ans._id,
                                        "quizitempost_user_checked_ans")
                                    if old_checked_ans != "None" and old_checked_ans != "":
                                        new_list = old_checked_ans
                                new_list.append(
                                    {str(curr_datetime): user_given_ans})
                                if new_list:
                                    create_gattribute(user_ans._id,
                                                      qip_user_checked_ans_AT,
                                                      new_list)
                            elif user_action == "submit":
                                if already_ans_obj:
                                    old_submitted_ans = get_attribute_value(
                                        user_ans._id,
                                        "quizitempost_user_submitted_ans")
                                    if old_submitted_ans != "None" and old_submitted_ans != "" and old_submitted_ans:
                                        new_list = old_submitted_ans
                                new_list.append(
                                    {str(curr_datetime): user_given_ans})
                                if new_list:
                                    create_gattribute(
                                        user_ans._id,
                                        qip_user_submitted_ans_AT, new_list)
                            user_ans.reload()
                # print "\n user_ans.attribute_set",user_ans.attribute_set
                response_dict['count'] = len(new_list)
                response_dict['success'] = True

                active_user_ids_list = [request.user.id]
                if old_submitted_ans:
                    recent_ans = old_submitted_ans[-1].values()
                    if recent_ans:
                        recent_ans = recent_ans[0]
                    is_user_given_ans_not_in_recent_submitted_ans = all(
                        each_usr_given_ans not in recent_ans
                        for each_usr_given_ans in user_given_ans)
                    recent_submitted_ans_was_correct = any(
                        each_submitted_ans in quiz_correct_ans
                        for each_submitted_ans in recent_ans)
                # print "\n recent_ans == ", recent_ans
                # print "\n user_given_ans == ", user_given_ans

                if GSTUDIO_BUDDY_LOGIN:
                    active_user_ids_list += Buddy.get_buddy_userids_list_within_datetime(
                        request.user.id, datetime.datetime.now())
                    # removing redundancy of user ids:
                    # active_user_ids_list = dict.fromkeys(active_user_ids_list).keys()

                counter_objs_cur = Counter.get_counter_objs_cur(
                    active_user_ids_list, group_id)

                #code to update counter collection
                # counter_obj = Counter.get_counter_obj(user_id, group_id)

                if not already_submitted_ans:
                    # This is the first time to attempt this quizitemevent
                    for userr_each_attr in user_ans.attribute_set:
                        if 'quizitempost_user_submitted_ans' in userr_each_attr:
                            if len(userr_each_attr[
                                    'quizitempost_user_submitted_ans']) != 0:
                                # counter_obj.no_questions_attempted+=1
                                for each_counter_obj in counter_objs_cur:
                                    each_counter_obj['quiz']['attempted'] += 1
                                    each_counter_obj.save()
                                counter_objs_cur.rewind()
                '''
                for each_attr in node_obj.attribute_set:
                    if 'correct_answer' in each_attr:
                        quiz_correct_ans = each_attr['correct_answer']
                    if 'quiz_type' in each_attr:
                        type_of_quiz = each_attr['quiz_type']
                '''

                for each_user_ans_attr in user_ans.attribute_set:
                    if 'quizitempost_user_submitted_ans' in each_user_ans_attr:
                        if quiz_type_val == 'Single-Choice':
                            if len(each_user_ans_attr[
                                    'quizitempost_user_submitted_ans']) != 0:

                                for each_counter_obj in counter_objs_cur:
                                    if cmp(quiz_correct_ans,
                                           user_given_ans) == 0:
                                        # counter_obj.no_correct_answers+=1
                                        if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans:
                                            if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj[
                                                    'quiz']['incorrect']:
                                                each_counter_obj['quiz'][
                                                    'incorrect'] -= 1
                                            if not recent_submitted_ans_was_correct:
                                                each_counter_obj['quiz'][
                                                    'correct'] += 1
                                                each_counter_obj[
                                                    'group_points'] += GSTUDIO_QUIZ_CORRECT_POINTS
                                            each_counter_obj.save()
                                    else:
                                        # each_counter_obj.no_incorrect_answers+=1
                                        if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans:
                                            if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj[
                                                    'quiz']['correct']:
                                                each_counter_obj['quiz'][
                                                    'correct'] -= 1
                                            if recent_submitted_ans_was_correct:
                                                each_counter_obj['quiz'][
                                                    'incorrect'] += 1
                                            each_counter_obj.save()
                                counter_objs_cur.rewind()

                        if quiz_type_val == 'Multiple-Choice':
                            if each_user_ans_attr[
                                    'quizitempost_user_submitted_ans']:
                                search = False
                                user_given_ans = [
                                    x.encode('UTF8') for x in user_given_ans
                                ]
                                quiz_correct_ans = [
                                    x.encode('UTF8') for x in quiz_correct_ans
                                ]
                                # print "\n user_given_ans : ", user_given_ans
                                # print "\n quiz_correct_ans: ", quiz_correct_ans
                                # Remove Carriage Return from Python strings ['\r'] in quiz_correct_ans
                                quiz_correct_ans_tmp = []
                                for each_option in quiz_correct_ans:
                                    each_option = each_option.replace('\r', '')
                                    quiz_correct_ans_tmp.append(each_option)
                                quiz_correct_ans = quiz_correct_ans_tmp

                                for each_user_given_ans in user_given_ans:
                                    if each_user_given_ans in quiz_correct_ans:
                                        search = True

                                # print "\n search : ", search
                                '''
                                i=0
                                while i<len(user_given_ans):

                                    try:
                                        quiz_correct_ans.index(user_given_ans[i])
                                        search=True
                                        i=i+1
                                    except Exception as e1:
                                        search=False
                                        break
                                '''

                                for each_counter_obj in counter_objs_cur:
                                    if search == True:
                                        try:
                                            if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans:
                                                if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj[
                                                        'quiz']['incorrect']:
                                                    each_counter_obj['quiz'][
                                                        'incorrect'] -= 1
                                                if not recent_submitted_ans_was_correct:
                                                    each_counter_obj['quiz'][
                                                        'correct'] += 1
                                                    # each_counter_obj.course_score+=GSTUDIO_QUIZ_CORRECT_POINTS
                                                    each_counter_obj[
                                                        'group_points'] += GSTUDIO_QUIZ_CORRECT_POINTS
                                                each_counter_obj.save()
                                        except Exception as rer:
                                            print "\n Error ", rer
                                    else:
                                        # each_counter_obj.no_incorrect_answers+=1
                                        if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans:
                                            if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj[
                                                    'quiz']['correct']:
                                                each_counter_obj['quiz'][
                                                    'correct'] -= 1
                                            if recent_submitted_ans_was_correct:
                                                each_counter_obj['quiz'][
                                                    'incorrect'] += 1
                                            each_counter_obj.save()
                                counter_objs_cur.rewind()

                        if quiz_type_val == 'Short-Response':
                            if len(user_given_ans) != 0:
                                # counter_obj.no_correct_answers+=1
                                for each_counter_obj in counter_objs_cur:
                                    if not already_submitted_ans:
                                        each_counter_obj['quiz'][
                                            'correct'] += 1
                                        # each_counter_obj.course_score += GSTUDIO_QUIZ_CORRECT_POINTS
                                        each_counter_obj[
                                            'group_points'] += GSTUDIO_QUIZ_CORRECT_POINTS
                                        each_counter_obj.save()
                #updated counter collection

            return HttpResponse(json.dumps(response_dict))

    except Exception as e:
        print "\n Something went wrong while saving quiz answer!!! ", str(e)
        return response_dict
コード例 #4
0
ファイル: discussion.py プロジェクト: lakshit07/gstudio
def create_discussion(request, group_id, node_id):
  '''
  Method to create discussion thread for File and Page.
  '''

  try:
    try:
        group_id = ObjectId(group_id)
    except:
        group_name, group_id = get_group_name_id(group_id)

    twist_st = node_collection.one({'_type':'GSystemType', 'name':'Twist'})
    node = node_collection.one({'_id': ObjectId(node_id)})
    thread = None

    if "Twist" in node.member_of_names_list:
        thread = node

    if not thread:
        thread = get_thread_node(node_id)
        # thread_id = get_thread_node(node_id)
        # if thread_id:
        #     thread = node_collection.one({'_id': ObjectId(thread_id)})
    # group = node_collection.one({'_id':ObjectId(group_id)})
    # thread = node_collection.one({"member_of": ObjectId(twist_st._id),"relation_set.thread_of.0": ObjectId(node._id)})
    # print "\n thread is ---", thread
    # thread = node_collection.one({ "_type": "GSystem", "name": node.name, "member_of": ObjectId(twist_st._id), "prior_node": ObjectId(node_id) })

    # the following code will never be executed
    # not commenting it for now.
    if not thread:
      # print "\n\n Creating Thread"
      thread_obj = create_thread_for_node(request, group_id, node)
      # print "\n thread_obj===",thread_obj
      # retriving RelationType
      # relation_type = node_collection.one({ "_type": "RelationType", "name": u"has_thread", "inverse_name": u"thread_of" })

      # Creating thread with the name of node
      # thread_obj = node_collection.collection.GSystem()

      # thread_obj.name = unicode(node.name)
      # thread_obj.status = u"PUBLISHED"

      # thread_obj.created_by = int(request.user.id)
      # thread_obj.modified_by = int(request.user.id)
      # thread_obj.contributors.append(int(request.user.id))

      # thread_obj.member_of.append(ObjectId(twist_st._id))
      # thread_obj.prior_node.append(ObjectId(node_id))
      # thread_obj.group_set.append(ObjectId(group_id))

      # thread_obj.save()
      # print "\n\n Thread id ", thread_obj._id
      # creating GRelation
      # create_grelation(node_id, relation_type, twist_st)
      if thread_obj:
          response_data = [ "thread-created", str(thread_obj._id) ]

      return HttpResponse(json.dumps(response_data))

    else:
      # print "\n\n Thread id Thread-exist ", thread._id
      response_data =  [ "Thread-exist", str(thread._id) ]

      return HttpResponse(json.dumps(response_data))

  except Exception as e:

    error_message = "\n DiscussionThreadCreateError: " + str(e) + "\n"
    raise Exception(error_message)
コード例 #5
0
ファイル: quiz.py プロジェクト: mrunal4/gstudio
def save_quizitem_answer(request, group_id):
    response_dict = {"success": False}
    try:
        if request.is_ajax() and request.method == "POST":
            try:
                group_id = ObjectId(group_id)
            except:
                group_name, group_id = get_group_name_id(group_id)
            import datetime

            new_list = []
            old_submitted_ans = None
            recent_ans = None
            is_user_given_ans_not_in_recent_submitted_ans = False
            recent_submitted_ans_was_correct = False

            user_given_ans = request.POST.getlist("user_given_ans[]", '')
            node_id = request.POST.get("node", '')
            node_obj = node_collection.one({'_id': ObjectId(node_id)})
            thread_obj = user_ans = None
            '''
            print "\n\n node_obj::::::::",node_obj.relation_set
            try:
                for each_rel in node_obj.relation_set:
                    if each_rel and "has_thread" in each_rel:
                        thread_id = each_rel['has_thread'][0]
                        thread_obj = node_collection.one({'_id': ObjectId(thread_id)})
                        # print "\n\n thread_obj === ", thread_obj.name , "==="
            except:
                pass
            '''

            thread_obj = get_thread_node(node_obj._id)
            # grel_dict = get_relation_value(node_obj._id,"has_thread", True)
            # is_cursor = grel_dict.get("cursor",False)
            # if not is_cursor:
            #     thread_obj = grel_dict.get("grel_node")
            #     # print "\n thread_obj: ", thread_obj

            user_action = request.POST.get("user_action", '')

            user_id = int(request.user.id)
            user_name = unicode(request.user.username)
            qip_gst = node_collection.one({ '_type': 'GSystemType', 'name': 'QuizItemPost'})
            qip_user_submitted_ans_AT = node_collection.one({'_type': "AttributeType", 'name': "quizitempost_user_submitted_ans"})
            qip_user_checked_ans_AT = node_collection.one({'_type': "AttributeType", 'name': "quizitempost_user_checked_ans"})
            already_ans_obj = already_submitted_ans = None
            # print "\n\n thread_obj == ", thread_obj
            if thread_obj != None:
                already_ans_obj = node_collection.find_one({'member_of': qip_gst._id,'created_by': user_id, 'prior_node': thread_obj._id})

                if already_ans_obj:
                    already_submitted_ans = get_attribute_value(already_ans_obj._id,"quizitempost_user_submitted_ans")
                    # print "\n already_submitted_ans == ", already_submitted_ans
                    # check whether user has already checked or submitted ans
                    user_ans = already_ans_obj
                else:
                    user_ans = node_collection.collection.GSystem()
                    user_ans.created_by = user_id
                    user_ans.modified_by = user_id
                    user_ans.contributors.append(user_id)
                    user_ans.member_of.append(qip_gst._id)
                    user_ans.group_set.append(group_id)
                if node_obj._id not in user_ans.prior_node:
                    user_ans.prior_node.append(node_obj._id)
                user_ans.origin = [{'thread_id': thread_obj._id, 'prior_node_id_of_thread': node_obj._id}]
                user_ans.status = u"PUBLISHED"
                user_ans.name = unicode("Answer_of:" + str(node_obj.name) + "-Answer_by:"+ str(user_name))
                user_ans.save()
                # print "\n\n user_ans== ",user_ans
                if user_id not in thread_obj.author_set:
                    thread_obj.author_set.append(user_id)
                    thread_obj.save()
                    # print "\n thread_obj.author_set",thread_obj.author_set
                if thread_obj._id not in user_ans.prior_node:
                    # add user's post/reply obj to thread obj's post_node
                    node_collection.collection.update({'_id': user_ans._id}, {'$push': {'prior_node':thread_obj._id}},upsert=False,multi=False)
                if user_ans._id not in thread_obj.post_node:
                    # add thread obj to user's post/reply prior_node
                    node_collection.collection.update({'_id': thread_obj._id}, {'$push': {'post_node':user_ans._id}},upsert=False,multi=False)
                quiz_type_val = get_attribute_value(node_obj._id,"quiz_type")
                quiz_correct_ans = get_attribute_value(node_obj._id,"correct_answer")
                # print "\n quiz_type_val: ", quiz_type_val
                # print "\n quiz_correct_ans: ", quiz_correct_ans
                # print "\n user_given_ans: ",user_given_ans
                quiz_correct_ans = (map(unicode,[re.sub(r'[\r]', '', cor_ans) for cor_ans in quiz_correct_ans]))


                # print "\n get_attribute_value--", get_attribute_value
                if user_given_ans and user_ans:
                    if quiz_type_val == "Short-Response":
                        create_gattribute(user_ans._id, qip_user_submitted_ans_AT, user_given_ans)
                    else:
                        curr_datetime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                        if user_given_ans:
                            if user_action == "check":
                                if already_ans_obj:
                                    old_checked_ans = get_attribute_value(user_ans._id,"quizitempost_user_checked_ans")
                                    if old_checked_ans != "None" and old_checked_ans != "":
                                        new_list = old_checked_ans
                                new_list.append({str(curr_datetime):user_given_ans})
                                if new_list:
                                    create_gattribute(user_ans._id, qip_user_checked_ans_AT, new_list)
                            elif user_action == "submit":
                                if already_ans_obj:
                                    old_submitted_ans = get_attribute_value(user_ans._id,"quizitempost_user_submitted_ans")
                                    if old_submitted_ans != "None" and old_submitted_ans != "" and old_submitted_ans:
                                        new_list = old_submitted_ans
                                new_list.append({str(curr_datetime):user_given_ans})
                                if new_list:
                                    create_gattribute(user_ans._id, qip_user_submitted_ans_AT, new_list)
                            user_ans.reload()
                # print "\n user_ans.attribute_set",user_ans.attribute_set
                response_dict['count'] = len(new_list)
                response_dict['success'] = True

                active_user_ids_list = [request.user.id]
                if old_submitted_ans:
                    recent_ans = old_submitted_ans[-1].values()
                    if recent_ans:
                        recent_ans = recent_ans[0]
                    is_user_given_ans_not_in_recent_submitted_ans = all(each_usr_given_ans not in recent_ans for each_usr_given_ans in user_given_ans)
                    recent_submitted_ans_was_correct = any(each_submitted_ans in quiz_correct_ans for each_submitted_ans in recent_ans)
                # print "\n recent_ans == ", recent_ans
                # print "\n user_given_ans == ", user_given_ans

                if GSTUDIO_BUDDY_LOGIN:
                    active_user_ids_list += Buddy.get_buddy_userids_list_within_datetime(request.user.id, datetime.datetime.now())
                    # removing redundancy of user ids:
                    # active_user_ids_list = dict.fromkeys(active_user_ids_list).keys()

                counter_objs_cur = Counter.get_counter_objs_cur(active_user_ids_list, group_id)

                #code to update counter collection
                # counter_obj = Counter.get_counter_obj(user_id, group_id)

                if not already_submitted_ans:
                    # This is the first time to attempt this quizitemevent
                    for userr_each_attr in user_ans.attribute_set:
                        if 'quizitempost_user_submitted_ans' in userr_each_attr:
                            if len(userr_each_attr['quizitempost_user_submitted_ans'])!=0:
                                # counter_obj.no_questions_attempted+=1
                                for each_counter_obj in counter_objs_cur:
                                    each_counter_obj['quiz']['attempted'] += 1
                                    each_counter_obj.save()
                                counter_objs_cur.rewind()
                '''
                for each_attr in node_obj.attribute_set:
                    if 'correct_answer' in each_attr:
                        quiz_correct_ans = each_attr['correct_answer']
                    if 'quiz_type' in each_attr:
                        type_of_quiz = each_attr['quiz_type']
                '''

                for each_user_ans_attr in user_ans.attribute_set:
                    if 'quizitempost_user_submitted_ans' in each_user_ans_attr:
                        if quiz_type_val=='Single-Choice':
                            if len(each_user_ans_attr['quizitempost_user_submitted_ans'])!=0:

                                for each_counter_obj in counter_objs_cur:
                                    if cmp(quiz_correct_ans,user_given_ans)==0:
                                        # counter_obj.no_correct_answers+=1
                                        if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans:
                                            if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj['quiz']['incorrect']:
                                                each_counter_obj['quiz']['incorrect'] -= 1
                                            if not recent_submitted_ans_was_correct:
                                                each_counter_obj['quiz']['correct'] += 1
                                                each_counter_obj['group_points'] += GSTUDIO_QUIZ_CORRECT_POINTS
                                            each_counter_obj.save()
                                    else:
                                        # each_counter_obj.no_incorrect_answers+=1
                                        if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans:
                                            if is_user_given_ans_not_in_recent_submitted_ans and each_counter_obj['quiz']['correct']:
                                                each_counter_obj['quiz']['correct'] -= 1
                                            if recent_submitted_ans_was_correct:
                                                each_counter_obj['quiz']['incorrect'] += 1
                                            each_counter_obj.save()
                                counter_objs_cur.rewind()

                        if quiz_type_val=='Multiple-Choice':
                            if each_user_ans_attr['quizitempost_user_submitted_ans']:
                                search = False
                                user_given_ans = [x.encode('UTF8') for x in user_given_ans]
                                quiz_correct_ans = [x.encode('UTF8') for x in quiz_correct_ans]
                                # print "\n user_given_ans : ", user_given_ans
                                # print "\n quiz_correct_ans: ", quiz_correct_ans
                                # Remove Carriage Return from Python strings ['\r'] in quiz_correct_ans
                                quiz_correct_ans_tmp = []
                                for each_option in quiz_correct_ans:
                                    each_option = each_option.replace('\r','')
                                    quiz_correct_ans_tmp.append(each_option)
                                quiz_correct_ans = quiz_correct_ans_tmp

                                for each_user_given_ans in user_given_ans:
                                    if each_user_given_ans in quiz_correct_ans:
                                        search = True

                                # print "\n search : ", search

                                '''
                                i=0
                                while i<len(user_given_ans):

                                    try:
                                        quiz_correct_ans.index(user_given_ans[i])
                                        search=True
                                        i=i+1
                                    except Exception as e1:
                                        search=False
                                        break
                                '''


                                for each_counter_obj in counter_objs_cur:
                                    if search==True:
                                        try:
                                            if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans:
                                                if is_user_given_ans_not_in_recent_submitted_ans and  each_counter_obj['quiz']['incorrect']:
                                                    each_counter_obj['quiz']['incorrect'] -= 1
                                                if not recent_submitted_ans_was_correct:
                                                    each_counter_obj['quiz']['correct'] += 1
                                                    # each_counter_obj.course_score+=GSTUDIO_QUIZ_CORRECT_POINTS
                                                    each_counter_obj['group_points'] += GSTUDIO_QUIZ_CORRECT_POINTS
                                                each_counter_obj.save()
                                        except Exception as rer:
                                            print "\n Error ", rer
                                    else:
                                        # each_counter_obj.no_incorrect_answers+=1
                                        if not already_submitted_ans or is_user_given_ans_not_in_recent_submitted_ans:
                                            if is_user_given_ans_not_in_recent_submitted_ans and  each_counter_obj['quiz']['correct']:
                                                each_counter_obj['quiz']['correct'] -= 1
                                            if recent_submitted_ans_was_correct:
                                                each_counter_obj['quiz']['incorrect'] += 1
                                            each_counter_obj.save()
                                counter_objs_cur.rewind()

                        if quiz_type_val=='Short-Response':
                            if len(user_given_ans)!=0:
                                # counter_obj.no_correct_answers+=1
                                for each_counter_obj in counter_objs_cur:
                                    if not already_submitted_ans:
                                        each_counter_obj['quiz']['correct'] += 1
                                        # each_counter_obj.course_score += GSTUDIO_QUIZ_CORRECT_POINTS
                                        each_counter_obj['group_points'] += GSTUDIO_QUIZ_CORRECT_POINTS
                                        each_counter_obj.save()
                #updated counter collection



            return HttpResponse(json.dumps(response_dict))


    except Exception as e:
        print "\n Something went wrong while saving quiz answer!!! ", str(e)
        return response_dict