def video_edit(request,group_id,_id): # ins_objectid = ObjectId() # if ins_objectid.is_valid(group_id) is False : # group_ins = node_collection.find_one({'_type': "Group","name": group_id}) # auth = node_collection.one({'_type': 'Author', 'name': unicode(request.user.username) }) # if group_ins: # group_id = str(group_ins._id) # else : # auth = node_collection.one({'_type': 'Author', 'name': unicode(request.user.username) }) # if auth : # group_id = str(auth._id) # else : # pass try: group_id = ObjectId(group_id) except: group_name, group_id = get_group_name_id(group_id) vid_node = node_collection.one({"_id": ObjectId(_id)}) title = GST_VIDEO.name video_obj=request.GET.get("vid_id","") group_obj = node_collection.one({'_id': ObjectId(group_id)}) ce_id = request.GET.get('course_event_id') course_tab_title = request.POST.get("course_tab_title",'') res = request.GET.get('res') if request.method == "POST": # get_node_common_fields(request, vid_node, group_id, GST_VIDEO) vid_node.save(is_changed=get_node_common_fields(request, vid_node, group_id, GST_VIDEO),groupid=group_id) thread_create_val = request.POST.get("thread_create",'') course_tab_title = request.POST.get("course_tab_title",'') # help_info_page = request.POST.getlist('help_info_page','') help_info_page = request.POST['help_info_page'] if help_info_page: help_info_page = json.loads(help_info_page) discussion_enable_at = node_collection.one({"_type": "AttributeType", "name": "discussion_enable"}) if thread_create_val == "Yes": create_gattribute(vid_node._id, discussion_enable_at, True) return_status = create_thread_for_node(request,group_id, vid_node) else: create_gattribute(vid_node._id, discussion_enable_at, False) # print "\n\n help_info_page ================ ",help_info_page if help_info_page and u"None" not in help_info_page: has_help_rt = node_collection.one({'_type': "RelationType", 'name': "has_help"}) try: help_info_page = map(ObjectId, help_info_page) create_grelation(vid_node._id, has_help_rt,help_info_page) except Exception as invalidobjectid: # print "\n\n ERROR -------- ",invalidobjectid pass else: # Check if node had has_help RT grel_dict = get_relation_value(vid_node._id,"has_help") # print "\n\n grel_dict ==== ", grel_dict if grel_dict: grel_id = grel_dict.get("grel_id","") if grel_id: for each_grel_id in grel_id: del_status, del_status_msg = delete_grelation( subject_id=vid_node._id, node_id=each_grel_id, deletion_type=0 ) # print "\n\n del_status == ",del_status # print "\n\n del_status_msg == ",del_status_msg if "CourseEventGroup" not in group_obj.member_of_names_list: get_node_metadata(request,vid_node) teaches_list = request.POST.get('teaches_list', '') # get the teaches list assesses_list = request.POST.get('assesses_list', '') # get the teaches list if teaches_list !='': teaches_list=teaches_list.split(",") create_grelation_list(vid_node._id,"teaches",teaches_list) if assesses_list !='': assesses_list=assesses_list.split(",") create_grelation_list(vid_node._id,"assesses",assesses_list) return HttpResponseRedirect(reverse('video_detail', kwargs={'group_id': group_id, '_id': vid_node._id})) else: vid_node.status = u"PUBLISHED" vid_node.save() if course_tab_title: if course_tab_title == "raw material": course_tab_title = "raw_material" return HttpResponseRedirect(reverse('course_'+course_tab_title + '_detail', kwargs={'group_id': group_id, 'node_id': str(vid_node._id)})) return HttpResponseRedirect(reverse('course_about', kwargs={'group_id': group_id})) # url = "/"+ str(group_id) +"/?selected="+str(vid_node._id)+"#view_page" # return HttpResponseRedirect(url) else: vid_col = node_collection.find({'member_of': GST_VIDEO._id,'group_set': ObjectId(group_id)}) nodes_list = [] for each in vid_col: nodes_list.append(str((each.name).strip().lower())) return render_to_response("ndf/video_edit.html", { 'node': vid_node, 'title': title, 'group_id': group_id, 'groupid':group_id, 'video_obj':video_obj, 'nodes_list':nodes_list, 'ce_id': ce_id, 'res': res, 'course_tab_title':course_tab_title }, context_instance=RequestContext(request) )
def create_discussion(request, group_id, node_id): ''' Method to create discussion thread for File and Page. ''' try: try: group_id = ObjectId(group_id) except: group_name, group_id = get_group_name_id(group_id) twist_st = node_collection.one({'_type':'GSystemType', 'name':'Twist'}) node = node_collection.one({'_id': ObjectId(node_id)}) thread = None if "Twist" in node.member_of_names_list: thread = node if not thread: thread = get_thread_node(node_id) # thread_id = get_thread_node(node_id) # if thread_id: # thread = node_collection.one({'_id': ObjectId(thread_id)}) # group = node_collection.one({'_id':ObjectId(group_id)}) # thread = node_collection.one({"member_of": ObjectId(twist_st._id),"relation_set.thread_of.0": ObjectId(node._id)}) # print "\n thread is ---", thread # thread = node_collection.one({ "_type": "GSystem", "name": node.name, "member_of": ObjectId(twist_st._id), "prior_node": ObjectId(node_id) }) # the following code will never be executed # not commenting it for now. if not thread: # print "\n\n Creating Thread" thread_obj = create_thread_for_node(request, group_id, node) # print "\n thread_obj===",thread_obj # retriving RelationType # relation_type = node_collection.one({ "_type": "RelationType", "name": u"has_thread", "inverse_name": u"thread_of" }) # Creating thread with the name of node # thread_obj = node_collection.collection.GSystem() # thread_obj.name = unicode(node.name) # thread_obj.status = u"PUBLISHED" # thread_obj.created_by = int(request.user.id) # thread_obj.modified_by = int(request.user.id) # thread_obj.contributors.append(int(request.user.id)) # thread_obj.member_of.append(ObjectId(twist_st._id)) # thread_obj.prior_node.append(ObjectId(node_id)) # thread_obj.group_set.append(ObjectId(group_id)) # thread_obj.save() # print "\n\n Thread id ", thread_obj._id # creating GRelation # create_grelation(node_id, relation_type, twist_st) if thread_obj: response_data = [ "thread-created", str(thread_obj._id) ] return HttpResponse(json.dumps(response_data)) else: # print "\n\n Thread id Thread-exist ", thread._id response_data = [ "Thread-exist", str(thread._id) ] return HttpResponse(json.dumps(response_data)) except Exception as e: error_message = "\n DiscussionThreadCreateError: " + str(e) + "\n" raise Exception(error_message)
def create_edit_page(request, group_id, node_id=None): """Creates/Modifies details about the given quiz-item. """ # ins_objectid = ObjectId() # if ins_objectid.is_valid(group_id) is False : # group_ins = node_collection.find_one({'_type': "Group", "name": group_id}) # auth = node_collection.one({'_type': 'Author', 'name': unicode(request.user.username) }) # if group_ins: # group_id = str(group_ins._id) # else : # auth = node_collection.one({'_type': 'Author', 'name': unicode(request.user.username) }) # if auth : # group_id = str(auth._id) # else : # pass group_name, group_id = get_group_name_id(group_id) ce_id = request.GET.get('course_event_id', '') blog_type = request.GET.get('blog_type', '') res = request.GET.get('res', '') program_res = request.GET.get('program_res', '') context_variables = { 'title': gst_page.name, 'group_id': group_id, 'groupid': group_id, 'ce_id': ce_id, 'res': res, 'program_res': program_res, 'blog_type': blog_type } group_obj = node_collection.one({'_id': ObjectId(group_id)}) available_nodes = node_collection.find({ '_type': u'GSystem', 'member_of': ObjectId(gst_page._id), 'group_set': ObjectId(group_id), '_id': { '$ne': ObjectId(node_id) } }) nodes_list = [] thread = None url_name = "/home" # for each in available_nodes: # nodes_list.append(str((each.name).strip().lower())) # loop replaced by a list comprehension node_list = [str((each.name).strip().lower()) for each in available_nodes] # print "available_nodes: ", node_list if request.method == "POST": # get_node_common_fields(request, page_node, group_id, gst_page) page_name = request.POST.get('name', '') # print "====== page_name: ", page_name if page_name.strip().lower() in node_list and not node_id: new_page = False return render_to_response("error_base.html", { 'message': 'Page with same name already exists in the group!' }, context_instance=RequestContext(request)) elif node_id: new_page = False page_node = node_collection.one({ '_type': u'GSystem', '_id': ObjectId(node_id) }) else: new_page = True page_node = node_collection.collection.GSystem() # page_type = request.POST.getlist("type_of",'') ce_id = request.POST.get("ce_id", '') blog_type = request.POST.get('blog_type', '') res = request.POST.get("res", '') program_res = request.POST.get('program_res', '') # we are fetching the value of release_response flag # if this is set, it means, we can proceed to create a thread node # for the current page node. thread_create_val = request.POST.get("thread_create", '') # print "\n\n thread_create_val", thread_create_val # print "\n\n request.POST === ",request.POST # raise Exception("demo") # help_info_page = request.POST.getlist('help_info_page','') help_info_page = request.POST['help_info_page'] if help_info_page: help_info_page = json.loads(help_info_page) # print "\n\n help_info_page === ",help_info_page #program_res and res are boolean values if program_res: program_res = eval(program_res) if res: res = eval(res) if blog_type: blog_type = eval(blog_type) # if page_type: # objid= page_type[0] # if not ObjectId(objid) in page_node.type_of: # page_type1=[] # page_type1.append(ObjectId(objid)) # page_node.type_of = page_type1 # page_node.type_of page_node.save(is_changed=get_node_common_fields( request, page_node, group_id, gst_page)) # if course event grp's id is passed, it means # its a blog page added in notebook and hence set type_of field as "Blog page" # print "\n\n blog_type---",blog_type if blog_type: blogpage_gst = node_collection.one({ '_type': "GSystemType", 'name': "Blog page" }) page_node.type_of = [blogpage_gst._id] elif GSTUDIO_SITE_NAME == "NROER" and "Author" in group_obj.member_of_names_list: infopage_gst = node_collection.one({ '_type': "GSystemType", 'name': "Info page" }) page_node.type_of = [infopage_gst._id] # if the page created is as a resource in course or program event, # set status to PUBLISHED by default # one major reason for this, ONLY published nodes can be replicated. if res or program_res or ce_id: page_node.status = u"PUBLISHED" page_node.save() # if page is created in program event, add page_node to group's collection set if program_res: group_obj = node_collection.one({'_id': ObjectId(group_id)}) group_obj.collection_set.append(page_node._id) group_obj.save() discussion_enable_at = node_collection.one({ "_type": "AttributeType", "name": "discussion_enable" }) if thread_create_val == "Yes" or blog_type: create_gattribute(page_node._id, discussion_enable_at, True) return_status = create_thread_for_node(request, group_id, page_node) else: create_gattribute(page_node._id, discussion_enable_at, False) # print "\n\n help_info_page ================ ",help_info_page if "None" not in help_info_page: has_help_rt = node_collection.one({ '_type': "RelationType", 'name': "has_help" }) try: help_info_page = map(ObjectId, help_info_page) create_grelation(page_node._id, has_help_rt, help_info_page) page_node.reload() except Exception as invalidobjectid: # print invalidobjectid pass else: # Check if node had has_help RT grel_dict = get_relation_value(page_node._id, "has_help") # print "\n\n grel_dict ==== ", grel_dict if grel_dict: grel_id = grel_dict.get("grel_id", "") if grel_id: for each_grel_id in grel_id: del_status, del_status_msg = delete_grelation( subject_id=page_node._id, node_id=each_grel_id, deletion_type=0) # print "\n\n del_status == ",del_status # print "\n\n del_status_msg == ",del_status_msg # To fill the metadata info while creating and editing page node metadata = request.POST.get("metadata_info", '') if "CourseEventGroup" in group_obj.member_of_names_list and blog_type: if new_page: # counter_obj = Counter.get_counter_obj(request.user.id,ObjectId(group_id)) # # counter_obj.no_notes_written=counter_obj.no_notes_written+1 # counter_obj['page']['blog']['created'] += 1 # # counter_obj.course_score += GSTUDIO_NOTE_CREATE_POINTS # counter_obj['group_points'] += GSTUDIO_NOTE_CREATE_POINTS # counter_obj.last_update = datetime.datetime.now() # counter_obj.save() 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() counter_objs_cur = Counter.get_counter_objs_cur( active_user_ids_list, group_id) for each_counter_obj in counter_objs_cur: each_counter_obj['page']['blog']['created'] += 1 each_counter_obj[ 'group_points'] += GSTUDIO_NOTE_CREATE_POINTS each_counter_obj.last_update = datetime.datetime.now() each_counter_obj.save() return HttpResponseRedirect( reverse('course_notebook_tab_note', kwargs={ 'group_id': group_id, 'tab': 'my-notes', 'notebook_id': page_node._id })) if ce_id or res or program_res: url_name = "/" + group_name + "/" + str(page_node._id) if ce_id: # url_name = "/" + group_name + "/#journal-tab" url_name = "/" + group_name if res or program_res: url_name = "/" + group_name + "/?selected=" + str( page_node._id) + "#view_page" # print "\n\n url_name---",url_name return HttpResponseRedirect(url_name) if metadata: # Only while metadata editing if metadata == "metadata": if page_node: get_node_metadata(request, page_node, is_changed=True) # End of filling metadata return HttpResponseRedirect( reverse('page_details', kwargs={ 'group_id': group_id, 'app_id': page_node._id })) else: if node_id: page_node = node_collection.one({ '_type': u'GSystem', '_id': ObjectId(node_id) }) #page_node,ver=get_page(request,page_node) page_node.get_neighbourhood(page_node.member_of) context_variables['node'] = page_node context_variables['groupid'] = group_id context_variables['group_id'] = group_id # fetch Page instances # Page_node = node_collection.find_one({'_type':"GSystemType","name":"Page"}) page_instances = node_collection.find({"type_of": gst_page._id}) page_ins_list = [i for i in page_instances] context_variables['page_instance'] = page_ins_list context_variables['nodes_list'] = json.dumps(nodes_list) # print "\n\n context_variables----\n",context_variables return render_to_response("ndf/page_create_edit.html", context_variables, context_instance=RequestContext(request))
def create_edit_quiz_item(request, group_id, node_id=None, trans_node_id=None, lang='en'): """Creates/Modifies details about the given quiz-item. """ try: group_id = ObjectId(group_id) except: group_name, group_id = get_group_name_id(group_id) group_object = node_collection.one({'_id': ObjectId(group_id)}) rt_translation_of = Node.get_name_id_from_type('translation_of', 'RelationType', get_obj=True) node = quiz_node = quiz_node_id = quiz_item_node = None existing_grel = translate_grel = None translated_node = Node.get_node_by_id(ObjectId(trans_node_id)) question_content = None options_list = [] group_object_member_of_names_list = group_object.member_of_names_list gst_quiz_item_node = node_collection.one({'_type': u'GSystemType', 'name': u'QuizItem'}) if "CourseEventGroup" in group_object_member_of_names_list or "announced_unit" in group_object_member_of_names_list: gst_quiz_item_node = gst_quiz_item_event current_url = resolve(request.path_info).url_name context_variables = { 'title': gst_quiz_item_node.name, 'quiz_type_choices': QUIZ_TYPE_CHOICES, 'group_id': group_id, 'groupid': group_id, } if "translate" in current_url: context_variables.update({'translate': True}) language = get_language_tuple(lang) quiz_node_id = request.GET.get('quiznode','') return_url = request.GET.get('return_url','') if return_url: context_variables['return_url'] = return_url if quiz_node_id: quiz_node = node_collection.one({'_id': ObjectId(quiz_node_id)}) context_variables['quiz_node_id'] = quiz_node._id if node_id: node = node_collection.one({'_id': ObjectId(node_id)}) if gst_quiz._id in node.member_of: # Add question from a given Quiz category's context quiz_node = node else: # Edit a question quiz_item_node = node if translated_node: question_content = translated_node.content options_list = get_quiz_item_options(translated_node) else: if quiz_item_node: question_content = quiz_item_node.content options_list = get_quiz_item_options(quiz_item_node) existing_grel = triple_collection.one({ '_type': 'GRelation', 'subject': ObjectId(quiz_item_node._id), 'relation_type': rt_translation_of._id, 'language': language }) if existing_grel: # get existing translated_node translated_node = Node.get_node_by_id(existing_grel.right_subject) if translated_node: trans_node_id = translated_node._id if request.method == "POST": usrid = int(request.user.id) usrname = unicode(request.user.username) translate = request.POST.get('translate', False) quiz_node_id = request.POST.get('quiz_node_id','') maximum_attempts_val = request.POST.get('maximum_attempts','1') problem_weight_val = request.POST.get('problem_weight','1') show_correct_ans_val = request.POST.get('show_correct_ans','False') check_ans_val = request.POST.get('check_ans','False') quiz_type = request.POST.get('quiz_type_val','') # print "\n\n maximum_attempts",maximum_attempts_val # print "\n problem_weight",problem_weight_val # print "\n show_correct_ans",show_correct_ans_val if translate: translated_node = created_trans_node(request, group_id, node_id, trans_node_id, language) if quiz_type == QUIZ_TYPE_CHOICES[1] or quiz_type == QUIZ_TYPE_CHOICES[2]: options = options_attachment(request, translated_node, language) # if node_id: # quiz_item_node = node_collection.one({'_id': ObjectId(node_id)}) # else: # # Add miscellaneous question # quiz_item_node = node_collection.collection.GSystem() elif node_id: node = node_collection.one({'_id': ObjectId(node_id)}) if gst_quiz._id in node.member_of: # Add question from a given Quiz category's context quiz_node = node quiz_item_node = node_collection.collection.GSystem() else: # Edit a question quiz_item_node = node else: # Add miscellaneous question quiz_item_node = node_collection.collection.GSystem() # quiz_item_node = node_collection.one({'_id': ObjectId(node_id)}) # question_content = request.POST.get('content_org','') if not translate: name,content = get_quiz_item_name_content(request) quiz_item_node.name = unicode(name) quiz_type_AT = node_collection.one({'_type': "AttributeType", 'name': "quiz_type"}) correct_answer_AT = node_collection.one({'_type': "AttributeType", 'name': "correct_answer"}) quizitem_show_correct_ans_AT = node_collection.one({'_type': "AttributeType", 'name': "quizitem_show_correct_ans"}) quizitem_problem_weight_AT = node_collection.one({'_type': "AttributeType", 'name': "quizitem_problem_weight"}) quizitem_max_attempts_AT = node_collection.one({'_type': "AttributeType", 'name': "quizitem_max_attempts"}) quizitem_check_ans_AT = node_collection.one({'_type': "AttributeType", 'name': "quizitem_check_answer"}) quiz_item_node.altnames = quiz_item_node.content quiz_item_node.save(is_changed=get_node_common_fields(request, quiz_item_node, group_id, gst_quiz_item_node),groupid=group_id) # quiz_item_node.language = language if quiz_node_id: quiz_node = node_collection.one({'_id': ObjectId(quiz_node_id)}) # create gattribute quiz_type,options, correct_answer # quiz_item_node['quiz_type'] = unicode(quiz_type) create_gattribute(quiz_item_node._id, quizitem_max_attempts_AT, int(maximum_attempts_val)) create_gattribute(quiz_item_node._id, quizitem_problem_weight_AT, float(problem_weight_val)) create_gattribute(quiz_item_node._id, quizitem_show_correct_ans_AT, eval(show_correct_ans_val)) create_gattribute(quiz_item_node._id, quiz_type_AT, unicode(quiz_type)) create_gattribute(quiz_item_node._id, quizitem_check_ans_AT, eval(check_ans_val)) # If "quiz_type" is either 'Single-Choice' or 'Multiple-Choice', then only extract options if quiz_type == QUIZ_TYPE_CHOICES[1] or quiz_type == QUIZ_TYPE_CHOICES[2]: options = options_attachment(request, quiz_item_node, language) # Extracting correct-answer, depending upon 'Multiple-Choice' / 'Single-Choice' qt_initial = quiz_type[:quiz_type.find("-")].lower() # quiz_item_node['correct_answer'] = [] correct_ans_val = None if quiz_type == QUIZ_TYPE_CHOICES[1]: # Single Choice correct_ans_val = request.POST.getlist('correct_answer_' + qt_initial) # quiz_item_node['correct_answer'].append(correct_answer) elif quiz_type == QUIZ_TYPE_CHOICES[2]: # Multiple Choice correct_ans_val = request.POST.getlist('correct_answer_' + qt_initial) # quiz_item_node['correct_answer'] = correct_answer if correct_ans_val: # To handle if Quiz-type is Short-Response correct_answer = map(int,correct_ans_val) # Convert list of unicode ele to list of int ele correct_ans_val_list = [options[each_val-1] for each_val in correct_answer] create_gattribute(quiz_item_node._id, correct_answer_AT, correct_ans_val_list) # thread_obj = create_thread_for_node(request,group_id, quiz_item_node) quiz_item_node.reload() quiz_item_node.status = u"PUBLISHED" quiz_item_node.save(groupid=group_id) # Create a thread for QuizItem also. Can be used in preview # Create thread node thread_node = create_thread_for_node(request,group_id, quiz_item_node) if "QuizItemEvent" in quiz_item_node.member_of_names_list: return_url = request.POST.get("return_url") # print "\n\n return_url", return_url, type(return_url) if return_url: return HttpResponseRedirect(reverse(return_url, kwargs={'group_id': group_id})) if quiz_node: quiz_node.collection_set.append(quiz_item_node._id) quiz_node.save(groupid=group_id) return HttpResponseRedirect(reverse('quiz', kwargs={'group_id': group_id})) else: if node_id: if quiz_item_node: quiz_item_node.get_neighbourhood(quiz_item_node.member_of) context_variables.update({'node': quiz_item_node, 'groupid':group_id, 'group_id': group_id, 'translated_node': translated_node, 'question_content': question_content, 'options_list': options_list }) return render_to_response("ndf/quiz_item_create_edit.html", context_variables, context_instance=RequestContext(request) )
def node_create_edit(request, group_id=None, member_of=None, detail_url_name=None, node_type='GSystem', node_id=None): ''' creation as well as edit of node ''' # check for POST method to node update operation if request.method == "POST": # put validations if node_type not in node_collection.db.connection._registered_documents.keys(): raise ValueError('Improper node_type passed') kwargs={} group_name, group_id = Group.get_group_name_id(group_id) member_of_name, member_of_id = GSystemType.get_gst_name_id(member_of) if node_id: # existing node object node_obj = Node.get_node_by_id(node_id) else: # create new kwargs={ 'group_set': group_id, 'member_of': member_of_id } node_obj = node_collection.collection[node_type]() language = get_language_tuple(request.POST.get('language', None)) node_obj.fill_gstystem_values(request=request, language=language, **kwargs) node_obj.save(group_id=group_id) node_id = node_obj['_id'] # Consider for Blog page creation if member_of_name == "Page": blog_page_gst_name, blog_page_gst_id = GSystemType.get_gst_name_id("Blog page") if blog_page_gst_id in node_obj.type_of: discussion_enable_at = node_collection.one({"_type": "AttributeType", "name": "discussion_enable"}) create_gattribute(node_obj._id, discussion_enable_at, True) return_status = create_thread_for_node(request,group_id, node_obj) 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() counter_objs_cur = Counter.get_counter_objs_cur(active_user_ids_list, group_id) for each_counter_obj in counter_objs_cur: each_counter_obj['page']['blog']['created'] += 1 each_counter_obj['group_points'] += GSTUDIO_NOTE_CREATE_POINTS each_counter_obj.last_update = datetime.datetime.now() each_counter_obj.save() post_req = request.POST attrs_to_create_update = [f for f in post_req.keys() if ('attribute' in f)] attrs_to_create_update = [a.split('_')[1] for a in attrs_to_create_update] for each_attr_name in attrs_to_create_update: each_attr_name_obj = Node.get_name_id_from_type(each_attr_name, 'AttributeType', get_obj=True) post_req_attr_key = 'attribute_'+each_attr_name post_method = 'getlist' if (each_attr_name_obj.data_type in [list, 'list']) else 'get' create_gattribute(node_id, each_attr_name_obj, object_value=getattr(post_req, post_method)(post_req_attr_key)) return HttpResponseRedirect(reverse(detail_url_name, kwargs={'group_id': group_id, 'node_id': node_id}))
def create_edit_page(request, group_id, node_id=None): """Creates/Modifies details about the given quiz-item. """ # ins_objectid = ObjectId() # if ins_objectid.is_valid(group_id) is False : # group_ins = node_collection.find_one({'_type': "Group", "name": group_id}) # auth = node_collection.one({'_type': 'Author', 'name': unicode(request.user.username) }) # if group_ins: # group_id = str(group_ins._id) # else : # auth = node_collection.one({'_type': 'Author', 'name': unicode(request.user.username) }) # if auth : # group_id = str(auth._id) # else : # pass group_name, group_id = get_group_name_id(group_id) ce_id = request.GET.get('course_event_id','') blog_type = request.GET.get('blog_type','') res = request.GET.get('res','') program_res = request.GET.get('program_res','') context_variables = { 'title': gst_page.name, 'group_id': group_id, 'groupid': group_id, 'ce_id': ce_id, 'res':res, 'program_res':program_res, 'blog_type': blog_type } group_obj = node_collection.one({'_id': ObjectId(group_id)}) available_nodes = node_collection.find({'_type': u'GSystem', 'member_of': ObjectId(gst_page._id),'group_set': ObjectId(group_id), '_id': {'$ne': ObjectId(node_id)} }) nodes_list = [] thread = None url_name = "/home" # for each in available_nodes: # nodes_list.append(str((each.name).strip().lower())) # loop replaced by a list comprehension node_list = [str((each.name).strip().lower()) for each in available_nodes] # print "available_nodes: ", node_list if request.method == "POST": # get_node_common_fields(request, page_node, group_id, gst_page) page_name = request.POST.get('name', '') # print "====== page_name: ", page_name if page_name.strip().lower() in node_list and not node_id: new_page=False return render_to_response("error_base.html", {'message': 'Page with same name already exists in the group!'}, context_instance=RequestContext(request)) elif node_id: new_page = False page_node = node_collection.one({'_type': u'GSystem', '_id': ObjectId(node_id)}) else: new_page = True page_node = node_collection.collection.GSystem() # page_type = request.POST.getlist("type_of",'') ce_id = request.POST.get("ce_id",'') blog_type = request.POST.get('blog_type','') res = request.POST.get("res",'') program_res = request.POST.get('program_res','') # we are fetching the value of release_response flag # if this is set, it means, we can proceed to create a thread node # for the current page node. thread_create_val = request.POST.get("thread_create",'') # print "\n\n thread_create_val", thread_create_val # print "\n\n request.POST === ",request.POST # raise Exception("demo") # help_info_page = request.POST.getlist('help_info_page','') help_info_page = request.POST['help_info_page'] if help_info_page: help_info_page = json.loads(help_info_page) # print "\n\n help_info_page === ",help_info_page #program_res and res are boolean values if program_res: program_res = eval(program_res) if res: res = eval(res) if blog_type: blog_type = eval(blog_type) # if page_type: # objid= page_type[0] # if not ObjectId(objid) in page_node.type_of: # page_type1=[] # page_type1.append(ObjectId(objid)) # page_node.type_of = page_type1 # page_node.type_of page_node.save(is_changed=get_node_common_fields(request, page_node, group_id, gst_page)) # if course event grp's id is passed, it means # its a blog page added in notebook and hence set type_of field as "Blog page" # print "\n\n blog_type---",blog_type if blog_type: blogpage_gst = node_collection.one({'_type': "GSystemType", 'name': "Blog page"}) page_node.type_of = [blogpage_gst._id] elif GSTUDIO_SITE_NAME == "NROER" and "Author" in group_obj.member_of_names_list: infopage_gst = node_collection.one({'_type': "GSystemType", 'name': "Info page"}) page_node.type_of = [infopage_gst._id] # if the page created is as a resource in course or program event, # set status to PUBLISHED by default # one major reason for this, ONLY published nodes can be replicated. if res or program_res or ce_id: page_node.status = u"PUBLISHED" page_node.save() # if page is created in program event, add page_node to group's collection set if program_res: group_obj = node_collection.one({'_id': ObjectId(group_id)}) group_obj.collection_set.append(page_node._id) group_obj.save() discussion_enable_at = node_collection.one({"_type": "AttributeType", "name": "discussion_enable"}) if thread_create_val == "Yes" or blog_type: create_gattribute(page_node._id, discussion_enable_at, True) return_status = create_thread_for_node(request,group_id, page_node) else: create_gattribute(page_node._id, discussion_enable_at, False) # print "\n\n help_info_page ================ ",help_info_page if "None" not in help_info_page: has_help_rt = node_collection.one({'_type': "RelationType", 'name': "has_help"}) try: help_info_page = map(ObjectId, help_info_page) create_grelation(page_node._id, has_help_rt,help_info_page) page_node.reload() except Exception as invalidobjectid: # print invalidobjectid pass else: # Check if node had has_help RT grel_dict = get_relation_value(page_node._id,"has_help") # print "\n\n grel_dict ==== ", grel_dict if grel_dict: grel_id = grel_dict.get("grel_id","") if grel_id: for each_grel_id in grel_id: del_status, del_status_msg = delete_grelation( subject_id=page_node._id, node_id=each_grel_id, deletion_type=0 ) # print "\n\n del_status == ",del_status # print "\n\n del_status_msg == ",del_status_msg # To fill the metadata info while creating and editing page node metadata = request.POST.get("metadata_info", '') if "CourseEventGroup" in group_obj.member_of_names_list and blog_type: if new_page: # counter_obj = Counter.get_counter_obj(request.user.id,ObjectId(group_id)) # # counter_obj.no_notes_written=counter_obj.no_notes_written+1 # counter_obj['page']['blog']['created'] += 1 # # counter_obj.course_score += GSTUDIO_NOTE_CREATE_POINTS # counter_obj['group_points'] += GSTUDIO_NOTE_CREATE_POINTS # counter_obj.last_update = datetime.datetime.now() # counter_obj.save() 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() counter_objs_cur = Counter.get_counter_objs_cur(active_user_ids_list, group_id) for each_counter_obj in counter_objs_cur: each_counter_obj['page']['blog']['created'] += 1 each_counter_obj['group_points'] += GSTUDIO_NOTE_CREATE_POINTS each_counter_obj.last_update = datetime.datetime.now() each_counter_obj.save() return HttpResponseRedirect(reverse('course_notebook_tab_note', kwargs={ 'group_id': group_id, 'tab': 'my-notes', 'notebook_id': page_node._id }) ) if ce_id or res or program_res: url_name = "/" + group_name + "/" + str(page_node._id) if ce_id: # url_name = "/" + group_name + "/#journal-tab" url_name = "/" + group_name if res or program_res: url_name = "/" + group_name + "/?selected=" + str(page_node._id) + "#view_page" # print "\n\n url_name---",url_name return HttpResponseRedirect(url_name) if metadata: # Only while metadata editing if metadata == "metadata": if page_node: get_node_metadata(request,page_node,is_changed=True) # End of filling metadata return HttpResponseRedirect(reverse('page_details', kwargs={'group_id': group_id, 'app_id': page_node._id })) else: if node_id: page_node = node_collection.one({'_type': u'GSystem', '_id': ObjectId(node_id)}) #page_node,ver=get_page(request,page_node) page_node.get_neighbourhood(page_node.member_of) context_variables['node'] = page_node context_variables['groupid'] = group_id context_variables['group_id'] = group_id # fetch Page instances # Page_node = node_collection.find_one({'_type':"GSystemType","name":"Page"}) page_instances = node_collection.find({"type_of": gst_page._id}) page_ins_list = [i for i in page_instances] context_variables['page_instance'] = page_ins_list context_variables['nodes_list'] = json.dumps(nodes_list) # print "\n\n context_variables----\n",context_variables return render_to_response("ndf/page_create_edit.html", context_variables, context_instance=RequestContext(request) )
def create_edit_quiz_item(request, group_id, node_id=None): """Creates/Modifies details about the given quiz-item. """ try: group_id = ObjectId(group_id) except: group_name, group_id = get_group_name_id(group_id) group_object = node_collection.one({'_id': ObjectId(group_id)}) node = None quiz_node = None quiz_node_id = None quiz_item_node = None gst_quiz_item = node_collection.one({'_type': u'GSystemType', 'name': u'QuizItem'}) # if "CourseEventGroup" in group_object.member_of_names_list: # gst_quiz_item = node_collection.one({'_type': u'GSystemType', 'name': u'QuizItemEvent'}) # if node_id: # quiz_item_node = node_collection.one({'_id': ObjectId(node_id)}) quiz_node_id = request.GET.get('quiznode','') return_url = request.GET.get('return_url','') context_variables = { 'title': gst_quiz_item.name, 'quiz_type_choices': QUIZ_TYPE_CHOICES, 'group_id': group_id, 'groupid': group_id, } if return_url: context_variables['return_url'] = return_url if quiz_node_id: quiz_node = node_collection.one({'_id': ObjectId(quiz_node_id)}) context_variables['quiz_node_id'] = quiz_node._id if node_id: node = node_collection.one({'_id': ObjectId(node_id)}) if gst_quiz._id in node.member_of: # Add question from a given Quiz category's context quiz_node = node else: # Edit a question quiz_item_node = node if request.method == "POST": usrid = int(request.user.id) usrname = unicode(request.user.username) # if node_id: # quiz_item_node = node_collection.one({'_id': ObjectId(node_id)}) # else: # # Add miscellaneous question # quiz_item_node = node_collection.collection.GSystem() if node_id: node = node_collection.one({'_id': ObjectId(node_id)}) if gst_quiz._id in node.member_of: # Add question from a given Quiz category's context quiz_node = node quiz_item_node = node_collection.collection.GSystem() else: # Edit a question quiz_item_node = node else: # Add miscellaneous question quiz_item_node = node_collection.collection.GSystem() # quiz_item_node = node_collection.one({'_id': ObjectId(node_id)}) # question_content = request.POST.get('content_org','') question_content = request.POST.get('quiz_item_name','Untitled') question_content = question_content.split(' ') question_content = question_content[:4] question_content = ' '.join(question_content) # print "\n\n question_content---",question_content question_content = re.sub('<[^>]*>', ' ', question_content) quiz_item_node.name = unicode(question_content) quiz_type_AT = node_collection.one({'_type': "AttributeType", 'name': "quiz_type"}) options_AT = node_collection.one({'_type': "AttributeType", 'name': "options"}) correct_answer_AT = node_collection.one({'_type': "AttributeType", 'name': "correct_answer"}) quizitem_show_correct_ans_AT = node_collection.one({'_type': "AttributeType", 'name': "quizitem_show_correct_ans"}) quizitem_problem_weight_AT = node_collection.one({'_type': "AttributeType", 'name': "quizitem_problem_weight"}) quizitem_max_attempts_AT = node_collection.one({'_type': "AttributeType", 'name': "quizitem_max_attempts"}) quizitem_check_ans_AT = node_collection.one({'_type': "AttributeType", 'name': "quizitem_check_answer"}) quiz_node_id = request.POST.get('quiz_node_id','') maximum_attempts_val = request.POST.get('maximum_attempts','1') problem_weight_val = request.POST.get('problem_weight','1') show_correct_ans_val = request.POST.get('show_correct_ans','False') check_ans_val = request.POST.get('check_ans','False') # print "\n\n maximum_attempts",maximum_attempts_val # print "\n problem_weight",problem_weight_val # print "\n show_correct_ans",show_correct_ans_val quiz_item_node.save(is_changed=get_node_common_fields(request, quiz_item_node, group_id, gst_quiz_item),groupid=group_id) if quiz_node_id: quiz_node = node_collection.one({'_id': ObjectId(quiz_node_id)}) quiz_type = request.POST.get('quiz_type_val','') # create gattribute quiz_type,options, correct_answer # quiz_item_node['quiz_type'] = unicode(quiz_type) create_gattribute(quiz_item_node._id, quizitem_max_attempts_AT, int(maximum_attempts_val)) create_gattribute(quiz_item_node._id, quizitem_problem_weight_AT, float(problem_weight_val)) create_gattribute(quiz_item_node._id, quizitem_show_correct_ans_AT, eval(show_correct_ans_val)) create_gattribute(quiz_item_node._id, quiz_type_AT, unicode(quiz_type)) create_gattribute(quiz_item_node._id, quizitem_check_ans_AT, eval(check_ans_val)) # If "quiz_type" is either 'Single-Choice' or 'Multiple-Choice', then only extract options options = [] if quiz_type != QUIZ_TYPE_CHOICES[0]: no_of_options = int(request.POST.get('no_of_options','')) # quiz_item_node['options'] = [] # print "\n\n no_of_options",no_of_options i = 1 while i <= no_of_options: options.append(request.POST.get("option" if i == 1 else "option_"+str(i))) i = i + 1 # quiz_item_node['options'] = options create_gattribute(quiz_item_node._id, options_AT, options) # Extracting correct-answer, depending upon 'Multiple-Choice' / 'Single-Choice' qt_initial = quiz_type[:quiz_type.find("-")].lower() # quiz_item_node['correct_answer'] = [] correct_ans_val = None if quiz_type == QUIZ_TYPE_CHOICES[1]: # Single Choice correct_ans_val = request.POST.getlist('correct_answer_' + qt_initial) # quiz_item_node['correct_answer'].append(correct_answer) elif quiz_type == QUIZ_TYPE_CHOICES[2]: # Multiple Choice correct_ans_val = request.POST.getlist('correct_answer_' + qt_initial) # quiz_item_node['correct_answer'] = correct_answer if correct_ans_val: # To handle if Quiz-type is Short-Response correct_answer = map(int,correct_ans_val) # Convert list of unicode ele to list of int ele correct_ans_val_list = [options[each_val-1] for each_val in correct_answer] create_gattribute(quiz_item_node._id, correct_answer_AT, correct_ans_val_list) # thread_obj = create_thread_for_node(request,group_id, quiz_item_node) quiz_item_node.reload() quiz_item_node.status = u"PUBLISHED" quiz_item_node.save(groupid=group_id) if "QuizItemEvent" in quiz_item_node.member_of_names_list: # Create thread node create_thread_for_node_flag = True if quiz_item_node.relation_set: for eachrel in quiz_item_node.relation_set: if eachrel and "has_thread" in eachrel: create_thread_for_node_flag = False if create_thread_for_node_flag: return_status = create_thread_for_node(request,group_id, quiz_item_node) print "\n\n return_status === ", return_status return_url = request.POST.get("return_url") # print "\n\n return_url", return_url, type(return_url) if return_url: if return_url == "groupchange": return HttpResponseRedirect(reverse('groupchange', kwargs={'group_id': group_id})) elif return_url == "course_content": return HttpResponseRedirect(reverse('course_content', kwargs={'group_id': group_id})) return HttpResponseRedirect(return_url) if quiz_node: quiz_node.collection_set.append(quiz_item_node._id) quiz_node.save(groupid=group_id) return HttpResponseRedirect(reverse('quiz', kwargs={'group_id': group_id})) else: if node_id: if quiz_item_node: quiz_item_node.get_neighbourhood(quiz_item_node.member_of) context_variables['node'] = quiz_item_node context_variables['groupid'] = group_id context_variables['group_id'] = group_id # context_variables['quiz_node']=quiz_node return render_to_response("ndf/quiz_item_create_edit.html", context_variables, context_instance=RequestContext(request) )
def create_edit_quiz_item(request, group_id, node_id=None): """Creates/Modifies details about the given quiz-item. """ try: group_id = ObjectId(group_id) except: group_name, group_id = get_group_name_id(group_id) group_object = node_collection.one({'_id': ObjectId(group_id)}) node = None quiz_node = None quiz_node_id = None quiz_item_node = None gst_quiz_item = node_collection.one({ '_type': u'GSystemType', 'name': u'QuizItem' }) # if "CourseEventGroup" in group_object.member_of_names_list: # gst_quiz_item = node_collection.one({'_type': u'GSystemType', 'name': u'QuizItemEvent'}) # if node_id: # quiz_item_node = node_collection.one({'_id': ObjectId(node_id)}) quiz_node_id = request.GET.get('quiznode', '') return_url = request.GET.get('return_url', '') context_variables = { 'title': gst_quiz_item.name, 'quiz_type_choices': QUIZ_TYPE_CHOICES, 'group_id': group_id, 'groupid': group_id, } if return_url: context_variables['return_url'] = return_url if quiz_node_id: quiz_node = node_collection.one({'_id': ObjectId(quiz_node_id)}) context_variables['quiz_node_id'] = quiz_node._id if node_id: node = node_collection.one({'_id': ObjectId(node_id)}) if gst_quiz._id in node.member_of: # Add question from a given Quiz category's context quiz_node = node else: # Edit a question quiz_item_node = node if request.method == "POST": usrid = int(request.user.id) usrname = unicode(request.user.username) # if node_id: # quiz_item_node = node_collection.one({'_id': ObjectId(node_id)}) # else: # # Add miscellaneous question # quiz_item_node = node_collection.collection.GSystem() if node_id: node = node_collection.one({'_id': ObjectId(node_id)}) if gst_quiz._id in node.member_of: # Add question from a given Quiz category's context quiz_node = node quiz_item_node = node_collection.collection.GSystem() else: # Edit a question quiz_item_node = node else: # Add miscellaneous question quiz_item_node = node_collection.collection.GSystem() # quiz_item_node = node_collection.one({'_id': ObjectId(node_id)}) # question_content = request.POST.get('content_org','') question_content = request.POST.get('quiz_item_name', 'Untitled') question_content = question_content.split(' ') question_content = question_content[:4] question_content = ' '.join(question_content) # print "\n\n question_content---",question_content question_content = re.sub('<[^>]*>', ' ', question_content) quiz_item_node.name = unicode(question_content) quiz_type_AT = node_collection.one({ '_type': "AttributeType", 'name': "quiz_type" }) options_AT = node_collection.one({ '_type': "AttributeType", 'name': "options" }) correct_answer_AT = node_collection.one({ '_type': "AttributeType", 'name': "correct_answer" }) quizitem_show_correct_ans_AT = node_collection.one({ '_type': "AttributeType", 'name': "quizitem_show_correct_ans" }) quizitem_problem_weight_AT = node_collection.one({ '_type': "AttributeType", 'name': "quizitem_problem_weight" }) quizitem_max_attempts_AT = node_collection.one({ '_type': "AttributeType", 'name': "quizitem_max_attempts" }) quizitem_check_ans_AT = node_collection.one({ '_type': "AttributeType", 'name': "quizitem_check_answer" }) quiz_node_id = request.POST.get('quiz_node_id', '') maximum_attempts_val = request.POST.get('maximum_attempts', '1') problem_weight_val = request.POST.get('problem_weight', '1') show_correct_ans_val = request.POST.get('show_correct_ans', 'False') check_ans_val = request.POST.get('check_ans', 'False') # print "\n\n maximum_attempts",maximum_attempts_val # print "\n problem_weight",problem_weight_val # print "\n show_correct_ans",show_correct_ans_val quiz_item_node.save(is_changed=get_node_common_fields( request, quiz_item_node, group_id, gst_quiz_item), groupid=group_id) if quiz_node_id: quiz_node = node_collection.one({'_id': ObjectId(quiz_node_id)}) quiz_type = request.POST.get('quiz_type_val', '') # create gattribute quiz_type,options, correct_answer # quiz_item_node['quiz_type'] = unicode(quiz_type) create_gattribute(quiz_item_node._id, quizitem_max_attempts_AT, int(maximum_attempts_val)) create_gattribute(quiz_item_node._id, quizitem_problem_weight_AT, float(problem_weight_val)) create_gattribute(quiz_item_node._id, quizitem_show_correct_ans_AT, eval(show_correct_ans_val)) create_gattribute(quiz_item_node._id, quiz_type_AT, unicode(quiz_type)) create_gattribute(quiz_item_node._id, quizitem_check_ans_AT, eval(check_ans_val)) # If "quiz_type" is either 'Single-Choice' or 'Multiple-Choice', then only extract options options = [] if quiz_type != QUIZ_TYPE_CHOICES[0]: no_of_options = int(request.POST.get('no_of_options', '')) # quiz_item_node['options'] = [] # print "\n\n no_of_options",no_of_options i = 1 while i <= no_of_options: options.append( request.POST.get("option" if i == 1 else "option_" + str(i))) i = i + 1 # quiz_item_node['options'] = options create_gattribute(quiz_item_node._id, options_AT, options) # Extracting correct-answer, depending upon 'Multiple-Choice' / 'Single-Choice' qt_initial = quiz_type[:quiz_type.find("-")].lower() # quiz_item_node['correct_answer'] = [] correct_ans_val = None if quiz_type == QUIZ_TYPE_CHOICES[1]: # Single Choice correct_ans_val = request.POST.getlist('correct_answer_' + qt_initial) # quiz_item_node['correct_answer'].append(correct_answer) elif quiz_type == QUIZ_TYPE_CHOICES[2]: # Multiple Choice correct_ans_val = request.POST.getlist('correct_answer_' + qt_initial) # quiz_item_node['correct_answer'] = correct_answer if correct_ans_val: # To handle if Quiz-type is Short-Response correct_answer = map( int, correct_ans_val ) # Convert list of unicode ele to list of int ele correct_ans_val_list = [ options[each_val - 1] for each_val in correct_answer ] create_gattribute(quiz_item_node._id, correct_answer_AT, correct_ans_val_list) # thread_obj = create_thread_for_node(request,group_id, quiz_item_node) quiz_item_node.reload() quiz_item_node.status = u"PUBLISHED" quiz_item_node.save(groupid=group_id) if "QuizItemEvent" in quiz_item_node.member_of_names_list: # Create thread node create_thread_for_node_flag = True if quiz_item_node.relation_set: for eachrel in quiz_item_node.relation_set: if eachrel and "has_thread" in eachrel: create_thread_for_node_flag = False if create_thread_for_node_flag: return_status = create_thread_for_node(request, group_id, quiz_item_node) print "\n\n return_status === ", return_status return_url = request.POST.get("return_url") # print "\n\n return_url", return_url, type(return_url) if return_url: if return_url == "groupchange": return HttpResponseRedirect( reverse('groupchange', kwargs={'group_id': group_id})) elif return_url == "course_content": return HttpResponseRedirect( reverse('course_content', kwargs={'group_id': group_id})) return HttpResponseRedirect(return_url) if quiz_node: quiz_node.collection_set.append(quiz_item_node._id) quiz_node.save(groupid=group_id) return HttpResponseRedirect( reverse('quiz', kwargs={'group_id': group_id})) else: if node_id: if quiz_item_node: quiz_item_node.get_neighbourhood(quiz_item_node.member_of) context_variables['node'] = quiz_item_node context_variables['groupid'] = group_id context_variables['group_id'] = group_id # context_variables['quiz_node']=quiz_node return render_to_response("ndf/quiz_item_create_edit.html", context_variables, context_instance=RequestContext(request))