def show_translation(request, group_id, node_id, lang): ''' for VIEW/READ: show translated provided node to provided LANG CODE lang could be either proper/full language-name/language-code ''' node = translated_node_id = None grel_node = triple_collection.one({ '_type': 'GRelation', 'subject': ObjectId(node_id), 'relation_type': rt_translation_of._id, 'language': get_language_tuple(lang), # 'status': 'PUBLISHED' }) if grel_node: node = Node.get_node_by_id(grel_node.right_subject) translated_node_id = node._id # code to show other translations other_translations_grels = triple_collection.find({ '_type': u'GRelation', 'subject': ObjectId(node_id), 'relation_type': rt_translation_of._id, 'right_subject': { '$nin': [translated_node_id] } }) other_translations = node_collection.find( {'_id': { '$in': [r.right_subject for r in other_translations_grels] }}) # --- END of code to show other translations return render_to_response("ndf/translate_detail.html", { 'group_id': Group.get_group_name_id(group_id)[1], 'groupid': Group.get_group_name_id(group_id)[1], 'source_node_id': node_id, 'source_node_obj': Node.get_node_by_id(node_id), 'node': node, 'other_translations': other_translations, 'card_url_name': 'show_translation', }, context_instance=RequestContext(request))
def activity_create_edit(request, group_id, lesson_id=None): ''' creation as well as edit of activities returns following list: {'success': <BOOL: 0 or 1>, 'unit_hierarchy': <unit hierarchy json>, 'msg': <error msg or objectid of newly created obj>} ''' # parent_group_name, parent_group_id = Group.get_group_name_id(group_id) lesson_id = request.POST.get('lesson_id') lesson_obj = Node.get_node_by_id(lesson_id) # parent unit id unit_id_post = request.POST.get('unit_id', '') unit_group_id = unit_id_post if unit_id_post else unit_group_id # getting parent unit object unit_group_obj = Group.get_group_name_id(unit_group_id, get_obj=True) result_dict = {'success': 0, 'unit_hierarchy': [], 'msg': ''} if request.method == "POST": # activity name activity_name = request.POST.get('name', '').strip() if not activity_name: msg = 'Name can not be empty.' result_dict = {'success': 0, 'unit_hierarchy': [], 'msg': msg} # return HttpResponse(result_dict) # unit_cs: unit collection_set lesson_cs_list = lesson_obj.collection_set lesson_cs_objs_cur = Node.get_nodes_by_ids_list(lesson_cs_list) lesson_cs_names_list = [u.name for u in lesson_cs_objs_cur] if activity_name in lesson_cs_names_list: msg = u'Activity with same name exists in lesson: ' + lesson_obj.name result_dict = {'success': 0, 'unit_hierarchy': [], 'msg': msg} # return HttpResponse(0) else: user_id = request.user.id new_activity_obj = node_collection.collection.GSystem() new_activity_obj.fill_gstystem_values(name=activity_name, member_of=gst_activity_id, group_set=unit_group_obj._id, created_by=user_id, status=u'PUBLISHED') new_activity_obj.save(groupid=group_id) lesson_obj.collection_set.append(new_activity_obj._id) lesson_obj.save(groupid=group_id) unit_structure = get_unit_hierarchy(unit_group_obj, request.LANGUAGE_CODE) msg = u'Added activity under lesson: ' + lesson_obj.name result_dict = { 'success': 1, 'unit_hierarchy': unit_structure, 'msg': str(new_activity_obj._id) } # return HttpResponse(json.dumps(unit_structure)) return HttpResponse(json.dumps(result_dict))
def create_assetcontent(asset_id, name, group_name_or_id, created_by, node_id=None, content=None, files=[None], resource_type='Page', request=HttpRequest(), **kwargs): # Mandatory arg: 'asset_id'. AssetContent should fall under Asset. # And if no Asset exists with supplied arg, can't proceeed. asset_obj = Node.get_node_by_id(asset_id) if not asset_obj: raise ValueError('No Asset exists with supplied asset_id.') if not name: name = request.POST.get('name') if request else None if not created_by: created_by = request.user.id if request else None group_name, group_id = get_group_name_id(group_name_or_id) group_id = ObjectId(group_id) if group_id not in asset_obj['group_set']: # AssetContent should fall under Asset. If 'group_id' arg is # supplied, it should fall under asset's group id. raise Exception( 'Supplied group_id and group_id of Asset does not match.') test_content = True if (content or files) else False # compulsory values, if not found raise error. # if not all([name, created_by, group_id, uploaded_files]): if not all([name, created_by, group_id, test_content]): raise ValueError( '"asset_id", "name", "created_by", "group" and ("content" or "files") are mandatory args.' ) author_obj = node_collection.one({ '_type': u'Author', 'created_by': created_by }) author_obj_id = author_obj._id group_set = [ObjectId(group_id), ObjectId(author_obj_id)] gst_name_id_dict = { 'Page': gst_page_id, 'page': gst_page_id, 'File': gst_file_id, 'file': gst_file_id } try: member_of_gst_id = gst_name_id_dict[resource_type] except Exception, e: print "resource_type arg is not supplied." # handle condition based on files. member_of_gst_id = gst_file_id if files[0] else gst_page_id
def unit_order_list(request, group_id, node_id): response_dict = {"success": False} unit_id_list = request.POST.get('unit_list', []) print "untlst:", unit_id_list try: items_sort_list_gattr_node = triple_collection.one({ '_type': 'GAttribute', 'subject': ObjectId(node_id), 'attribute_type': at_items_sort_list._id, 'status': u'PUBLISHED' }) if items_sort_list_gattr_node: ga_node = delete_gattribute(node_id=items_sort_list_gattr_node._id, deletion_type=0) if unit_id_list: unit_id_list = json.loads(unit_id_list) unit_obj_list = map( lambda each_id: Node.get_node_by_id(ObjectId(each_id)), unit_id_list) ga_node = create_gattribute(ObjectId(node_id), 'items_sort_list', unit_obj_list) response_dict["success"] = True except Exception as module_order_list_err: print "\nError Occurred in module_order_list(). ", module_order_list_err pass return HttpResponse(json.dumps(response_dict))
def module_create_edit(request, group_id, module_id=None, cancel_url='list_modules'): if request.method == "GET": template = 'ndf/module_form.html' additional_form_fields = {} module_attrs = ['educationalsubject', 'educationallevel'] # ma: module attr module_attr_values = {ma: '' for ma in module_attrs} if module_id: # existing module. url_name = 'node_edit' url_kwargs={'group_id': group_id, 'node_id': module_id, 'detail_url_name': 'module_detail'} # updating module attr dict: module_obj = Node.get_node_by_id(module_id) module_attr_values = module_obj.get_attributes_from_names_list(module_attrs) else: # new module url_name = 'node_create' url_kwargs={'group_id': group_id, 'member_of': 'Module', 'detail_url_name': 'module_detail'} additional_form_fields = { 'attribute': { 'Subject': { 'name' :'educationalsubject', 'widget': 'dropdown', 'value': module_attr_values['educationalsubject'], 'all_options': GSTUDIO_RESOURCES_EDUCATIONAL_SUBJECT }, 'Grade': { 'name' :'educationallevel', 'widget': 'dropdown', 'widget_attr': 'multiple', 'value': module_attr_values['educationallevel'], 'all_options': GSTUDIO_RESOURCES_EDUCATIONAL_LEVEL } } } req_context = RequestContext(request, { 'title': 'Module', 'node_obj': Node.get_node_by_id(module_id), 'group_id': group_id, 'groupid': group_id, 'additional_form_fields': additional_form_fields, 'post_url': reverse(url_name, kwargs=url_kwargs) }) return render_to_response(template, req_context)
def module_detail(request, group_id, node_id): ''' detail of of selected module ''' group_name, group_id = Group.get_group_name_id(group_id) module_obj = Node.get_node_by_id(node_id) module_detail_query = { '_id': { '$in': module_obj.collection_set }, 'status': 'PUBLISHED', '$or': [{ '$and': [{ 'member_of': gst_base_unit_id }, { '$or': [ { 'created_by': request.user.id }, { 'group_admin': request.user.id }, { 'author_set': request.user.id }, ] }] }, { 'member_of': gst_announced_unit_id }] } # units_under_module = Node.get_nodes_by_ids_list(module_obj.collection_set) ''' gstaff_access = check_is_gstaff(group_id, request.user) if gstaff_access: module_detail_query.update({'member_of': {'$in': [gst_announced_unit_id, gst_base_unit_id]}}) else: module_detail_query.update({'member_of': gst_announced_unit_id}) ''' units_under_module = node_collection.find(module_detail_query).sort( 'last_update', -1) template = 'ndf/module_detail.html' req_context = RequestContext( request, { 'title': 'Module', 'node': module_obj, 'units_under_module': units_under_module, 'group_id': group_id, 'groupid': group_id, 'card': 'ndf/event_card.html', 'card_url_name': 'groupchange' }) return render_to_response(template, req_context)
def activity_create_edit(request, group_id, lesson_id=None): ''' creation as well as edit of activities returns following list: {'success': <BOOL: 0 or 1>, 'unit_hierarchy': <unit hierarchy json>, 'msg': <error msg or objectid of newly created obj>} ''' # parent_group_name, parent_group_id = Group.get_group_name_id(group_id) lesson_id = request.POST.get('lesson_id') lesson_obj = Node.get_node_by_id(lesson_id) # parent unit id unit_id_post = request.POST.get('unit_id', '') unit_group_id = unit_id_post if unit_id_post else unit_group_id # getting parent unit object unit_group_obj = Group.get_group_name_id(unit_group_id, get_obj=True) result_dict = {'success': 0, 'unit_hierarchy': [], 'msg': ''} if request.method == "POST": # activity name activity_name = request.POST.get('name', '').strip() if not activity_name: msg = 'Name can not be empty.' result_dict = {'success': 0, 'unit_hierarchy': [], 'msg': msg} # return HttpResponse(result_dict) # unit_cs: unit collection_set lesson_cs_list = lesson_obj.collection_set lesson_cs_objs_cur = Node.get_nodes_by_ids_list(lesson_cs_list) lesson_cs_names_list = [u.name for u in lesson_cs_objs_cur] if activity_name in lesson_cs_names_list: msg = u'Activity with same name exists in lesson: ' + lesson_obj.name result_dict = {'success': 0, 'unit_hierarchy': [], 'msg': msg} # return HttpResponse(0) else: user_id = request.user.id new_activity_obj = node_collection.collection.GSystem() new_activity_obj.fill_gstystem_values(name=activity_name, member_of=gst_activity_id, group_set=unit_group_obj._id, created_by=user_id, status=u'PUBLISHED') new_activity_obj.save(groupid=group_id) lesson_obj.collection_set.append(new_activity_obj._id) lesson_obj.save(groupid=group_id) unit_structure = get_unit_hierarchy(unit_group_obj, request.LANGUAGE_CODE) msg = u'Added activity under lesson: ' + lesson_obj.name result_dict = {'success': 1, 'unit_hierarchy': unit_structure, 'msg': str(new_activity_obj._id)} # return HttpResponse(json.dumps(unit_structure)) return HttpResponse(json.dumps(result_dict))
def show_translation(request, group_id, node_id, lang): ''' for VIEW/READ: show translated provided node to provided LANG CODE lang could be either proper/full language-name/language-code ''' node = translated_node_id = None grel_node = triple_collection.one({ '_type': 'GRelation', 'subject': ObjectId(node_id), 'relation_type': rt_translation_of._id, 'language': get_language_tuple(lang), # 'status': 'PUBLISHED' }) if grel_node: node = Node.get_node_by_id(grel_node.right_subject) translated_node_id = node._id # code to show other translations other_translations_grels = triple_collection.find({ '_type': u'GRelation', 'subject': ObjectId(node_id), 'relation_type': rt_translation_of._id, 'right_subject': {'$nin': [translated_node_id]} }) other_translations = node_collection.find({'_id': {'$in': [r.right_subject for r in other_translations_grels]} }) # --- END of code to show other translations return render_to_response("ndf/translate_detail.html", { 'group_id': Group.get_group_name_id(group_id)[1], 'groupid': Group.get_group_name_id(group_id)[1], 'source_node_id': node_id, 'source_node_obj': Node.get_node_by_id(node_id), 'node': node, 'other_translations': other_translations, 'card_url_name': 'show_translation', }, context_instance=RequestContext(request))
def validate_deletion(node_id,force_deletion=False): try: node_obj = Node.get_node_by_id(node_id) if node_obj: if force_deletion: print "\n Force Deletion on: ", node_obj._id node_obj.delete() else: del_status, del_status_msg = delete_node(node_id=node_obj._id, deletion_type=1) validate_deletion(node_id,force_deletion=True) except Exception as validate_deletion_err: print "\n Error occurred.", str(validate_deletion_err)
def create_assetcontent(asset_id, name, group_name_or_id, created_by, node_id=None, content=None, files=[None], resource_type='Page', request=HttpRequest(), **kwargs): # Mandatory arg: 'asset_id'. AssetContent should fall under Asset. # And if no Asset exists with supplied arg, can't proceeed. asset_obj = Node.get_node_by_id(asset_id) if not asset_obj: raise ValueError('No Asset exists with supplied asset_id.') if not name: name = request.POST.get('name') if request else None if not created_by: created_by = request.user.id if request else None group_name, group_id = get_group_name_id(group_name_or_id) group_id = ObjectId(group_id) if group_id not in asset_obj['group_set']: # AssetContent should fall under Asset. If 'group_id' arg is # supplied, it should fall under asset's group id. raise Exception('Supplied group_id and group_id of Asset does not match.') test_content = True if (content or files) else False # compulsory values, if not found raise error. # if not all([name, created_by, group_id, uploaded_files]): if not all([name, created_by, group_id, test_content]): raise ValueError('"asset_id", "name", "created_by", "group" and ("content" or "files") are mandatory args.') author_obj = node_collection.one({'_type': u'Author', 'created_by': created_by}) author_obj_id = author_obj._id group_set = [ObjectId(group_id), ObjectId(author_obj_id)] gst_name_id_dict = { 'Page': gst_page_id, 'page': gst_page_id, 'File': gst_file_id, 'file': gst_file_id } try: member_of_gst_id = gst_name_id_dict[resource_type] except Exception, e: print "resource_type arg is not supplied." # handle condition based on files. member_of_gst_id = gst_file_id if files[0] else gst_page_id
def module_order_list(request): response_dict = {"success": False} module_id_list = request.POST.get('module_list', []) try: if module_id_list: module_id_list = json.loads(module_id_list) module_obj_list = map(lambda each_id: Node.get_node_by_id(ObjectId(each_id)), module_id_list) ga_node = create_gattribute(ObjectId(group_id), 'items_sort_list', module_obj_list) response_dict["success"] = True except Exception as module_order_list_err: print "\nError Occurred in module_order_list(). ", module_order_list_err pass return HttpResponse(json.dumps(response_dict))
def validate_deletion(node_id, force_deletion=False): try: node_obj = Node.get_node_by_id(node_id) if node_obj: if force_deletion: print "\n Force Deletion on: ", node_obj._id node_obj.delete() else: del_status, del_status_msg = delete_node( node_id=node_obj._id, deletion_type=1) validate_deletion(node_id, force_deletion=True) except Exception as validate_deletion_err: print "\n Error occurred.", str(validate_deletion_err)
def get_group_content(node_id, lang="en"): print "inside group content", node_id grp_dict = {} node_obj = Node.get_node_by_id(node_id) if node_obj: trans_grp = get_lang_node(node_id, lang) if trans_grp: grp_dict['label'] = trans_grp.name grp_dict['altlabel'] = trans_grp.altnames grp_dict['content'] = trans_grp.content else: grp_dict['label'] = node_obj.name grp_dict['altlabel'] = node_obj.altnames grp_dict['content'] = node_obj.content return grp_dict
def _group_deletion(group_id): try: group_obj = Group.get_group_name_id(group_id, get_obj=True) if group_obj: Group.purge_group(group_id, proceed=proceed_flag) validate_deletion(group_id) else: node_obj = Node.get_node_by_id(group_id) # If the ObjectId entered is not of a Group if node_obj: if node_obj.collection_set: for each_obj_id in node_obj.collection_set: _group_deletion(each_obj_id) del_status, del_status_msg = delete_node(node_id=node_obj._id, deletion_type=1) validate_deletion(node_obj._id) except Exception as group_del_err: print "\n Error occurred.", str(group_del_err)
def _group_deletion(group_id): try: group_obj = Group.get_group_name_id(group_id, get_obj=True) if group_obj: Group.purge_group(group_id, proceed=proceed_flag) validate_deletion(group_id) else: node_obj = Node.get_node_by_id(group_id) # If the ObjectId entered is not of a Group if node_obj: if node_obj.collection_set: for each_obj_id in node_obj.collection_set: _group_deletion(each_obj_id) del_status, del_status_msg = delete_node( node_id=node_obj._id, deletion_type=1) validate_deletion(node_obj._id) except Exception as group_del_err: print "\n Error occurred.", str(group_del_err)
def module_detail(request, group_id, node_id): ''' detail of of selected module ''' group_name, group_id = Group.get_group_name_id(group_id) module_obj = Node.get_node_by_id(node_id) module_detail_query = {'_id': {'$in': module_obj.collection_set}, 'status':'PUBLISHED', '$or': [ {'$and': [ {'member_of': gst_base_unit_id}, {'$or': [ {'created_by': request.user.id}, {'group_admin': request.user.id}, {'author_set': request.user.id}, ]} ]}, {'member_of': gst_announced_unit_id} ]} # units_under_module = Node.get_nodes_by_ids_list(module_obj.collection_set) ''' gstaff_access = check_is_gstaff(group_id, request.user) if gstaff_access: module_detail_query.update({'member_of': {'$in': [gst_announced_unit_id, gst_base_unit_id]}}) else: module_detail_query.update({'member_of': gst_announced_unit_id}) ''' units_under_module = node_collection.find(module_detail_query).sort('last_update', -1) template = 'ndf/module_detail.html' req_context = RequestContext(request, { 'title': 'Module', 'node': module_obj, 'units_under_module': units_under_module, 'group_id': group_id, 'groupid': group_id, 'card': 'ndf/event_card.html', 'card_url_name': 'groupchange' }) return render_to_response(template, req_context)
def module_order_list(request): response_dict = {"success": False} module_id_list = request.POST.get('module_list', []) try: items_sort_list_gattr_node = triple_collection.one({'_type': 'GAttribute', 'subject': group_id, 'attribute_type': at_items_sort_list._id, 'status': u'PUBLISHED'}) if items_sort_list_gattr_node: ga_node = delete_gattribute(node_id=items_sort_list_gattr_node._id, deletion_type=0) if module_id_list: module_id_list = json.loads(module_id_list) module_obj_list = map(lambda each_id: Node.get_node_by_id(ObjectId(each_id)), module_id_list) ga_node = create_gattribute(ObjectId(group_id), 'items_sort_list', module_obj_list) response_dict["success"] = True except Exception as module_order_list_err: print "\nError Occurred in module_order_list(). ", module_order_list_err pass return HttpResponse(json.dumps(response_dict))
def all_translations(request, group_id, node_id): ''' returns all translated nodes of provided node. ''' node_obj = Node.get_node_by_id(node_id) # node_translation_grels = node_obj.get_relation('translation_of', status='PUBLISHED') # return node_translation_grels # node_translation_grels = node_obj.get_relation('translation_of') all_translation_nodes = node_obj.get_relation_right_subject_nodes('translation_of') return render_to_response("ndf/translation_list.html", { 'group_id': Group.get_group_name_id(group_id)[1], 'groupid': Group.get_group_name_id(group_id)[1], 'nodes': all_translation_nodes, 'node': node_obj, 'source_node_id': node_id, 'card_url_name': 'show_translation', 'supported_languages': supported_languages }, context_instance=RequestContext(request))
def all_translations(request, group_id, node_id): ''' returns all translated nodes of provided node. ''' node_obj = Node.get_node_by_id(node_id) # node_translation_grels = node_obj.get_relation('translation_of', status='PUBLISHED') # return node_translation_grels # node_translation_grels = node_obj.get_relation('translation_of') all_translation_nodes = node_obj.get_relation_right_subject_nodes( 'translation_of') return render_to_response("ndf/translation_list.html", { 'group_id': Group.get_group_name_id(group_id)[1], 'groupid': Group.get_group_name_id(group_id)[1], 'nodes': all_translation_nodes, 'node': node_obj, 'source_node_id': node_id, 'card_url_name': 'show_translation', 'supported_languages': supported_languages }, context_instance=RequestContext(request))
def get_unit_hierarchy(unit_group_obj, lang="en"): ''' ARGS: unit_group_obj Result will be of following form: { name: 'Lesson1', type: 'lesson', id: 'l1', activities: [ { name: 'Activity 1', type: 'activity', id: 'a1' }, { name: 'Activity 1', type: 'activity', id: 'a2' } ] }, { name: 'Lesson2', type: 'lesson', id: 'l2', activities: [ { name: 'Activity 1', type: 'activity', id: 'a1' } ] } ''' unit_structure = [] for each in unit_group_obj.collection_set: lesson_dict = {} lesson = Node.get_node_by_id(each) if lesson: trans_lesson = get_lang_node(lesson._id, lang) if trans_lesson: lesson_dict['name'] = trans_lesson.name else: lesson_dict['name'] = lesson.name lesson_dict['type'] = 'lesson' lesson_dict['id'] = str(lesson._id) lesson_dict['language'] = lesson.language[0] lesson_dict['activities'] = [] if lesson.collection_set: for each_act in lesson.collection_set: activity_dict = {} activity = Node.get_node_by_id(each_act) if activity: trans_act = get_lang_node(activity._id, lang) if trans_act: # activity_dict['name'] = trans_act.name activity_dict[ 'name'] = trans_act.altnames or trans_act.name else: # activity_dict['name'] = activity.name activity_dict[ 'name'] = activity.altnames or activity.name activity_dict['type'] = 'activity' activity_dict['id'] = str(activity._id) lesson_dict['activities'].append(activity_dict) unit_structure.append(lesson_dict) return unit_structure
def get_course_content_hierarchy(unit_group_obj, lang="en"): ''' ARGS: unit_group_obj Result will be of following form: { name: 'Lesson1', type: 'lesson', id: 'l1', activities: [ { name: 'Activity 1', type: 'activity', id: 'a1' }, { name: 'Activity 1', type: 'activity', id: 'a2' } ] }, { name: 'Lesson2', type: 'lesson', id: 'l2', activities: [ { name: 'Activity 1', type: 'activity', id: 'a1' } ] } ''' unit_structure = [] for each in unit_group_obj.collection_set: lesson_dict = {} lesson = Node.get_node_by_id(each) if lesson: trans_lesson = get_lang_node(lesson._id, lang) if trans_lesson: lesson_dict['label'] = trans_lesson.name else: lesson_dict['label'] = lesson.name lesson_dict['id'] = lesson._id lesson_dict['type'] = 'unit-name' lesson_dict['children'] = [] if lesson.collection_set: for each_act in lesson.collection_set: activity_dict = {} activity = Node.get_node_by_id(each_act) if activity: trans_act_name = get_lang_node(each_act, lang) # activity_dict['label'] = trans_act_name.name or activity.name if trans_act_name: activity_dict[ 'label'] = trans_act_name.altnames or trans_act_name.name print "in side activity loop", trans_act_name._id, "in language", lang # activity_dict['label'] = trans_act_name.name else: # activity_dict['label'] = activity.name activity_dict[ 'label'] = activity.altnames or activity.name activity_dict['type'] = 'activity-group' activity_dict['id'] = str(activity._id) lesson_dict['children'].append(activity_dict) unit_structure.append(lesson_dict) return unit_structure
def module_detail(request, group_id, node_id, title=""): ''' detail of of selected module ''' group_name, group_id = Group.get_group_name_id(group_id) module_obj = Node.get_node_by_id(node_id) # module_detail_query = {'member_of': gst_base_unit_id, # '_id': {'$nin': module_unit_ids}, # 'status':'PUBLISHED', # } # if not gstaff_access: # module_detail_query.update({'$or': [ # {'created_by': request.user.id}, # {'group_admin': request.user.id}, # {'author_set': request.user.id}, # # No check on group-type PUBLIC for DraftUnits. # # {'group_type': 'PUBLIC'} # ]}) gstaff_access = check_is_gstaff(group_id, request.user) module_detail_query = { '_id': { '$in': module_obj.collection_set }, 'status': 'PUBLISHED' } ''' if not gstaff_access: module_detail_query.update({'$or': [ {'$and': [ {'member_of': gst_base_unit_id}, {'$or': [ {'created_by': request.user.id}, {'group_admin': request.user.id}, {'author_set': request.user.id}, ]} ]}, {'member_of': gst_announced_unit_id} ]}) ''' if title == "courses": module_detail_query.update({ '$or': [{ '$and': [{ 'member_of': gst_announced_unit_id }, { '$or': [ { 'created_by': request.user.id }, { 'group_admin': request.user.id }, { 'author_set': request.user.id }, ] }] }, { 'member_of': gst_announced_unit_id }] }) if title == "drafts": print "((((((((((((((((((((((((((" module_detail_query.update({ '$or': [ { '$and': [{ 'member_of': gst_base_unit_id }, { '$or': [ { 'created_by': request.user.id }, { 'group_admin': request.user.id }, { 'author_set': request.user.id }, ] }] }, ] }) # units_under_module = Node.get_nodes_by_ids_list(module_obj.collection_set) ''' gstaff_access = check_is_gstaff(group_id, request.user) if gstaff_access: module_detail_query.update({'member_of': {'$in': [gst_announced_unit_id, gst_base_unit_id]}}) else: module_detail_query.update({'member_of': gst_announced_unit_id}) ''' units_under_module = node_collection.find(module_detail_query).sort( 'last_update', -1) template = 'ndf/module_detail.html' req_context = RequestContext( request, { 'title': title, 'node': module_obj, 'units_under_module': units_under_module, 'group_id': group_id, 'groupid': group_id, 'card': 'ndf/event_card.html', 'card_url_name': 'groupchange' }) return render_to_response(template, req_context)
def translate(request, group_id, node_id, lang, translated_node_id=None, **kwargs): ''' for EDIT: translate provided node to provided LANG CODE lang could be either proper/full language-name/language-code `node_id` is _id of source node. ''' group_name, group_id = Group.get_group_name_id(group_id) language = get_language_tuple(lang) source_obj = Node.get_node_by_id(node_id) existing_grel = translate_grel = translated_node = None if translated_node_id: translated_node = Node.get_node_by_id(translated_node_id) else: # get translated_node existing_grel = triple_collection.one({ '_type': 'GRelation', 'subject': ObjectId(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) translate_grel = existing_grel if request.method == 'GET': return render_to_response("ndf/translate_form.html", { 'group_id': group_id, 'node_obj': translated_node, 'source_obj': source_obj, 'post_url': reverse('translate', kwargs={ 'group_id': group_id, 'node_id': node_id, 'lang': lang, }), 'cancel_url': reverse('show_translation', kwargs={ 'group_id': group_id, 'node_id': node_id, 'lang': lang, }) }, context_instance=RequestContext(request)) elif request.method == 'POST': # explicit `if` check for `POST` if not translated_node: # create a new translated new # translated_node = node_collection.collection.GSystem() # copy source_obj's data into a new if source_obj._type == "Group": translated_node = node_collection.collection.GSystem() exclude_fields = [ '_id', 'member_of', '_type', 'type_of', 'modified_by', 'prior_node', 'post_node' ] for each in translated_node: if each not in exclude_fields: translated_node[each] = source_obj[each] translated_node.group_set.append(source_obj._id) else: translated_node = source_obj.__deepcopy__() translated_node['_id'] = ObjectId() translated_node.fill_gstystem_values(request=request, language=language, **kwargs) trans_alt_name = request.POST.get('altnames', None) translated_node.altnames = unicode(trans_alt_name) translated_node.member_of = [ObjectId(trans_node_gst_id)] translated_node.save(group_id=group_id) if not existing_grel: trans_grel_list = [ObjectId(translated_node._id)] trans_grels = triple_collection.find({'_type': 'GRelation', \ 'relation_type': rt_translation_of._id,'subject': ObjectId(node_id)},{'_id': 0, 'right_subject': 1}) for each_rel in trans_grels: trans_grel_list.append(each_rel['right_subject']) translate_grel = create_grelation(node_id, rt_translation_of, trans_grel_list, language=language) # page_gst_name, page_gst_id = Node.get_name_id_from_type('Page', 'GSystemType') # return HttpResponseRedirect(reverse('page_details', kwargs={'group_id': group_id, 'app_id': page_gst_id })) # return HttpResponseRedirect(reverse('all_translations', kwargs={'group_id': group_id, 'node_id': node_id })) return HttpResponseRedirect( reverse('show_translation', kwargs={ 'group_id': group_id, 'node_id': node_id, 'lang': lang }))
def module_detail(request, group_id, node_id, title=""): ''' detail of of selected module ''' group_name, group_id = Group.get_group_name_id(group_id) print "in module_detail and group id, title", group_id, title print "node_id", node_id module_obj = Node.get_node_by_id(ObjectId(node_id)) context_variable = { 'group_id': group_id, 'groupid': group_id, 'node': module_obj, 'title': title, 'card': 'ndf/event_card.html', 'card_url_name': 'groupchange' } # module_detail_query = {'member_of': gst_base_unit_id, # '_id': {'$nin': module_unit_ids}, # 'status':'PUBLISHED', # } # if not gstaff_access: # module_detail_query.update({'$or': [ # {'created_by': request.user.id}, # {'group_admin': request.user.id}, # {'author_set': request.user.id}, # # No check on group-type PUBLIC for DraftUnits. # # {'group_type': 'PUBLIC'} # ]}) gstaff_access = check_is_gstaff(group_id, request.user) module_detail_query = { '_id': { '$in': module_obj.collection_set }, 'status': 'PUBLISHED' } ''' if not gstaff_access: module_detail_query.update({'$or': [ {'$and': [ {'member_of': gst_base_unit_id}, {'$or': [ {'created_by': request.user.id}, {'group_admin': request.user.id}, {'author_set': request.user.id}, ]} ]}, {'member_of': gst_announced_unit_id} ]}) ''' primary_lang_tuple = get_language_tuple(GSTUDIO_PRIMARY_COURSE_LANGUAGE) if title == "courses": # module_detail_query.update({'$or': [ # {'$and': [ # {'member_of': {'$in': [gst_announced_unit_id, gst_ce_id]}}, # {'$or': [ # {'created_by': request.user.id}, # {'group_admin': request.user.id}, # {'author_set': request.user.id}, # { # '$and': [ # {'group_type': u'PUBLIC'}, # {'language': primary_lang_tuple}, # ] # }, # ]} # ]}, # #{'member_of': gst_announced_unit_id } # ]}) # # # above can be delete after robust testing of following new query: module_detail_query.update({ 'status': 'PUBLISHED', '$or': [{ 'group_admin': request.user.id }, { 'created_by': request.user.id }, { 'author_set': request.user.id }, { 'member_of': gst_announced_unit_id }, { 'language': primary_lang_tuple, 'group_type': u'PUBLIC', 'member_of': gst_ce_id }] }) if title == "drafts": module_detail_query.update({ '$or': [ { '$and': [{ 'member_of': gst_base_unit_id }, { '$or': [ { 'created_by': request.user.id }, { 'group_admin': request.user.id }, { 'author_set': request.user.id }, ] }] }, ] }) # units_under_module = Node.get_nodes_by_ids_list(module_obj.collection_set) ''' gstaff_access = check_is_gstaff(group_id, request.user) if gstaff_access: module_detail_query.update({'member_of': {'$in': [gst_announced_unit_id, gst_base_unit_id]}}) else: module_detail_query.update({'member_of': gst_announced_unit_id}) ''' units_under_module = node_collection.find(module_detail_query).sort( 'last_update', -1) context_variable.update({'units_under_module': units_under_module}) units_sort_list = get_attribute_value(node_id, 'items_sort_list') from django.core.cache import cache test = cache.get('5945db6e2c4796014abd1784attribute_valueitems_sort_list') print "test:", test if units_sort_list: #print "from attribute:",units_sort_list context_variable.update({'units_sort_list': units_sort_list}) else: print "no items_sort_list" context_variable.update({'units_sort_list': list(units_under_module)}) template = 'ndf/module_detail.html' print "units of selected module", units_sort_list return render_to_response(template, context_variable, context_instance=RequestContext(request))
ObjectId('59425f864975ac013d976ac6'), ObjectId('59425ead4975ac013bf0f54b'), ObjectId('594260a54975ac013d976dc3')] module_sort_order_ids = [u'59abb47c69602a0156036296', u'5945db6e2c4796014abd1784',\ u'5945db2e2c4796014ddff67a', u'5945de532c4796014abd181a', u'5945de362c4796014ce12d7f',\ u'5938ed2369602a014cb67195', u'5945ddca2c4796014ddff735', u'599c139269602a013fe31aa2',\ u'59816df569602a015784baea', u'594b833869602a013f0cb6ce', u'594cfbea69602a014089845b', \ u'597ebd7b69602a0154bb417e', u'5945daf42c4796014ce12d2d', u'59aff39869602a0155bfac16'] try: module_obj_list = [] for each_id in module_sort_order_ids: try: each_node = Node.get_node_by_id(ObjectId(each_id)) if each_node: module_obj_list.append(each_node) except Exception as modulde_not_found_err: print "\nError in module_not_found for each_id: ", each_id, "\nError: ", modulde_not_found_err pass print "\nTotal modules: ", len(module_obj_list) home_grp_id = node_collection.one({'_type': 'Group', 'name': 'home'})._id create_gattribute(home_grp_id, 'items_sort_list', module_obj_list) except Exception as module_sort_order_ids_err: pass print "\nError in module_sort_order_ids. ", module_sort_order_ids_err units_cur = node_collection.find({'_type': 'Group', '_id': {'$in': units_for_renaming_leaf_nodes}}) for each_unit in units_cur: try: if each_unit:
def unit_create_edit(request, group_id, unit_group_id=None): ''' creation as well as eit of units ''' parent_group_name, parent_group_id = Group.get_group_name_id(group_id) unit_node = None if request.method == "GET": unit_node = node_collection.one({'_id': ObjectId(unit_group_id)}) template = "ndf/create_unit.html" all_groups = node_collection.find({'_type': "Group"},{"name":1}) all_groups_names = [str(each_group.name) for each_group in all_groups] modules = GSystem.query_list('home', 'Module', request.user.id) context_variables = {'group_id': parent_group_id,'groupid': parent_group_id, 'all_groups_names': all_groups_names, 'modules': modules} if unit_node: # get all modules which are parent's of this unit/group parent_modules = node_collection.find({ '_type': 'GSystem', 'member_of': gst_module_id, 'collection_set': {'$in': [unit_node._id]} }) context_variables.update({'unit_node': unit_node, 'title': 'Create Unit', 'module_val_list': [str(pm._id) for pm in parent_modules]}) req_context = RequestContext(request, context_variables) return render_to_response(template, req_context) elif request.method == "POST": group_name = request.POST.get('name', '') group_altnames = request.POST.get('altnames', '') unit_id_post = request.POST.get('node_id', '') unit_altnames = request.POST.get('altnames', '') content = request.POST.get('content', '') tags = request.POST.get('tags', []) language = request.POST.get('lan', '') group_type = request.POST.get('group_type', u'PUBLIC') educationallevel_val = request.POST.get('educationallevel', '') educationalsubject_val = request.POST.get('educationalsubject', '') # unit_group_id = unit_id_post if unit_id_post else unit_group_id # unit_group_name, unit_group_id = Group.get_group_name_id(unit_group_id) if unit_id_post: unit_node = node_collection.one({'_id': ObjectId(unit_id_post)}) success_flag = False if unit_node: if unit_node.altnames is not unit_altnames: unit_node.altnames = unit_altnames success_flag = True else: unit_group = CreateGroup(request) result = unit_group.create_group(group_name, group_id=parent_group_id, member_of=gst_base_unit_id, node_id=unit_group_id) success_flag = result[0] unit_node = result[1] unit_id = unit_node._id if language: language_val = get_language_tuple(unicode(language)) unit_node.language = language_val if educationallevel_val and "choose" not in educationallevel_val.lower(): educationallevel_at = node_collection.one({'_type': 'AttributeType', 'name': "educationallevel"}) create_gattribute(unit_node._id, educationallevel_at, educationallevel_val) if educationalsubject_val and "choose" not in educationalsubject_val.lower(): educationalsubject_at = node_collection.one({'_type': 'AttributeType', 'name': "educationalsubject"}) create_gattribute(unit_node._id, educationalsubject_at, educationalsubject_val) # modules module_val = request.POST.getlist('module', []) # get all modules which are parent's of this unit/group parent_modules = node_collection.find({ '_type': 'GSystem', 'member_of': gst_module_id, 'collection_set': {'$in': [unit_id]} }) # check for any mismatch in parent_modules and module_val if parent_modules or module_val: # import ipdb; ipdb.set_trace() module_oid_list = [ObjectId(m) for m in module_val if m] parent_modules_oid_list = [o._id for o in parent_modules] # summing all ids to iterate over oids_set = set(module_oid_list + parent_modules_oid_list) for each_oid in oids_set: if each_oid not in module_oid_list: # it is an old module existed with curent unit. # remove current node's id from it's collection_set # existing deletion each_node_obj = Node.get_node_by_id(each_oid) each_node_obj_cs = each_node_obj.collection_set each_node_obj_cs.pop(each_node_obj_cs.index(unit_id)) each_node_obj.collection_set = each_node_obj_cs each_node_obj.save(group_id=group_id) elif each_oid not in parent_modules_oid_list: # if this id does not exists with existing parent's id list # then add current node_id in collection_set of each_oid. # new addition each_node_obj = Node.get_node_by_id(each_oid) if unit_id not in each_node_obj.collection_set: each_node_obj.collection_set.append(unit_id) each_node_obj.save(group_id=group_id) if not success_flag: return HttpResponseRedirect(reverse('list_units', kwargs={'group_id': parent_group_id, 'groupid': parent_group_id,})) # if tags: # if not type(tags) is list: # tags = [unicode(t.strip()) for t in tags.split(",") if t != ""] # unit_node.tags = tags if tags: tags = json.loads(tags) else: tags = [] # unit_node.tags = tags unit_node.fill_group_values(group_type=group_type,tags=tags,author_set=unit_node.author_set) unit_node.content = content tab_name = request.POST.get('tab_name', '') section_name = request.POST.get('section_name', '') subsection_name = request.POST.get('subsection_name', '') if tab_name: unit_node['project_config'].update( {"tab_name":tab_name}) elif "base_unit" in unit_node.member_of_names_list or "announced_unit" in unit_node.member_of_names_list : unit_node['project_config'].update( {"tab_name":"Lessons"}) else: unit_node['project_config'].update( {"tab_name":"Tab Name"}) if section_name: unit_node['project_config'].update( {"section_name":section_name}) elif "base_unit" in unit_node.member_of_names_list or "announced_unit" in unit_node.member_of_names_list : unit_node['project_config'].update({"section_name":"Lesson"}) else: unit_node['project_config'].update({"section_name":"Section"}) if subsection_name: unit_node['project_config'].update( {"subsection_name":subsection_name}) elif "base_unit" in unit_node.member_of_names_list or "announced_unit" in unit_node.member_of_names_list : unit_node['project_config'].update({"subsection_name":"Add from Activities"}) else: unit_node['project_config'].update({"subsection_name":"Add SubSection"}) unit_node.save() return HttpResponseRedirect(reverse('course_about', kwargs={'group_id': unit_node._id}))
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 translate(request, group_id, node_id, lang, translated_node_id=None, **kwargs): ''' for EDIT: translate provided node to provided LANG CODE lang could be either proper/full language-name/language-code `node_id` is _id of source node. ''' group_name, group_id = Group.get_group_name_id(group_id) language = get_language_tuple(lang) source_obj = Node.get_node_by_id(node_id) existing_grel = translate_grel = translated_node = None if translated_node_id: translated_node = Node.get_node_by_id(translated_node_id) else: # get translated_node existing_grel = triple_collection.one({ '_type': 'GRelation', 'subject': ObjectId(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) translate_grel = existing_grel if request.method == 'GET': return render_to_response("ndf/translate_form.html", { 'group_id': group_id, 'node_obj': translated_node, 'source_obj': source_obj, 'post_url': reverse('translate', kwargs={ 'group_id': group_id, 'node_id': node_id, 'lang': lang, }) }, context_instance=RequestContext(request)) elif request.method == 'POST': # explicit `if` check for `POST` if not translated_node: # create a new translated new # translated_node = node_collection.collection.GSystem() # copy source_obj's data into a new if source_obj._type == "Group": translated_node = node_collection.collection.GSystem() exclude_fields = ['_id','member_of','_type','type_of','modified_by','prior_node','post_node'] for each in translated_node: if each not in exclude_fields: translated_node[each] = source_obj[each] translated_node.group_set.append(source_obj._id) else: translated_node = source_obj.__deepcopy__() translated_node['_id'] = ObjectId() translated_node.fill_gstystem_values(request=request, language=language, **kwargs) trans_alt_name = request.POST.get('altnames', None) translated_node.altnames = unicode(trans_alt_name) translated_node.member_of = [ObjectId(trans_node_gst_id)] translated_node.save(group_id=group_id) if not existing_grel: trans_grel_list = [ObjectId(translated_node._id)] trans_grels = triple_collection.find({'_type': 'GRelation', \ 'relation_type': rt_translation_of._id,'subject': ObjectId(node_id)},{'_id': 0, 'right_subject': 1}) for each_rel in trans_grels: trans_grel_list.append(each_rel['right_subject']) translate_grel = create_grelation(node_id, rt_translation_of, trans_grel_list, language=language) # page_gst_name, page_gst_id = Node.get_name_id_from_type('Page', 'GSystemType') # return HttpResponseRedirect(reverse('page_details', kwargs={'group_id': group_id, 'app_id': page_gst_id })) # return HttpResponseRedirect(reverse('all_translations', kwargs={'group_id': group_id, 'node_id': node_id })) return HttpResponseRedirect(reverse('show_translation', kwargs={'group_id': group_id, 'node_id': node_id, 'lang': lang }))
ObjectId('59425f864975ac013d976ac6'), ObjectId('59425ead4975ac013bf0f54b'), ObjectId('594260a54975ac013d976dc3') ] module_sort_order_ids = [u'59abb47c69602a0156036296', u'5945db6e2c4796014abd1784',\ u'5945db2e2c4796014ddff67a', u'5945de532c4796014abd181a', u'5945de362c4796014ce12d7f',\ u'5938ed2369602a014cb67195', u'5945ddca2c4796014ddff735', u'599c139269602a013fe31aa2',\ u'59816df569602a015784baea', u'594b833869602a013f0cb6ce', u'594cfbea69602a014089845b', \ u'597ebd7b69602a0154bb417e', u'5945daf42c4796014ce12d2d', u'59aff39869602a0155bfac16'] try: module_obj_list = [] for each_id in module_sort_order_ids: try: each_node = Node.get_node_by_id(ObjectId(each_id)) if each_node: module_obj_list.append(each_node) except Exception as modulde_not_found_err: print "\nError in module_not_found for each_id: ", each_id, "\nError: ", modulde_not_found_err pass print "\nTotal modules: ", len(module_obj_list) home_grp_id = node_collection.one({'_type': 'Group', 'name': 'home'})._id create_gattribute(home_grp_id, 'items_sort_list', module_obj_list) except Exception as module_sort_order_ids_err: pass print "\nError in module_sort_order_ids. ", module_sort_order_ids_err units_cur = node_collection.find({ '_type': 'Group', '_id': { '$in': units_for_renaming_leaf_nodes
def _get_unit_hierarchy(unit_group_obj,lang="en"): ''' ARGS: unit_group_obj Result will be of following form: { name: 'Lesson1', type: 'lesson', id: 'l1', activities: [ { name: 'Activity 1', type: 'activity', id: 'a1' }, { name: 'Activity 1', type: 'activity', id: 'a2' } ] }, { name: 'Lesson2', type: 'lesson', id: 'l2', activities: [ { name: 'Activity 1', type: 'activity', id: 'a1' } ] } ''' unit_structure = [] for each in unit_group_obj.collection_set: lesson_dict ={} lesson = Node.get_node_by_id(each) if lesson: trans_lesson = get_lang_node(lesson._id,lang) if trans_lesson: lesson_dict['name'] = trans_lesson.name else: lesson_dict['name'] = lesson.name lesson_dict['type'] = 'lesson' lesson_dict['id'] = str(lesson._id) lesson_dict['language'] = lesson.language[0] lesson_dict['activities'] = [] if lesson.collection_set: for each_act in lesson.collection_set: activity_dict ={} activity = Node.get_node_by_id(each_act) if activity: trans_act = get_lang_node(activity._id,lang) if trans_act: # activity_dict['name'] = trans_act.name activity_dict['name'] = trans_act.altnames or trans_act.name else: # activity_dict['name'] = activity.name activity_dict['name'] = activity.altnames or activity.name activity_dict['type'] = 'activity' activity_dict['id'] = str(activity._id) lesson_dict['activities'].append(activity_dict) unit_structure.append(lesson_dict) return unit_structure
def module_detail(request, group_id, node_id,title=""): ''' detail of of selected module ''' group_name, group_id = Group.get_group_name_id(group_id) module_obj = Node.get_node_by_id(ObjectId(node_id)) context_variable = { 'group_id': group_id, 'groupid': group_id, 'node': module_obj, 'title': title, 'card': 'ndf/event_card.html', 'card_url_name': 'groupchange' } # module_detail_query = {'member_of': gst_base_unit_id, # '_id': {'$nin': module_unit_ids}, # 'status':'PUBLISHED', # } # if not gstaff_access: # module_detail_query.update({'$or': [ # {'created_by': request.user.id}, # {'group_admin': request.user.id}, # {'author_set': request.user.id}, # # No check on group-type PUBLIC for DraftUnits. # # {'group_type': 'PUBLIC'} # ]}) gstaff_access = check_is_gstaff(group_id,request.user) module_detail_query = {'_id': {'$in': module_obj.collection_set}, 'status':'PUBLISHED' } ''' if not gstaff_access: module_detail_query.update({'$or': [ {'$and': [ {'member_of': gst_base_unit_id}, {'$or': [ {'created_by': request.user.id}, {'group_admin': request.user.id}, {'author_set': request.user.id}, ]} ]}, {'member_of': gst_announced_unit_id} ]}) ''' primary_lang_tuple = get_language_tuple(GSTUDIO_PRIMARY_COURSE_LANGUAGE) if title == "courses": module_detail_query.update({'$or': [ {'$and': [ {'member_of': {'$in': [gst_announced_unit_id, gst_ce_id]}}, {'$or': [ {'created_by': request.user.id}, {'group_admin': request.user.id}, {'author_set': request.user.id}, { '$and': [ {'group_type': u'PUBLIC'}, {'language': primary_lang_tuple}, ] }, ]} ]}, #{'member_of': gst_announced_unit_id } ]}) if title == "drafts": module_detail_query.update({'$or': [ {'$and': [ {'member_of': gst_base_unit_id}, {'$or': [ {'created_by': request.user.id}, {'group_admin': request.user.id}, {'author_set': request.user.id}, ]} ]}, ]}) # units_under_module = Node.get_nodes_by_ids_list(module_obj.collection_set) ''' gstaff_access = check_is_gstaff(group_id, request.user) if gstaff_access: module_detail_query.update({'member_of': {'$in': [gst_announced_unit_id, gst_base_unit_id]}}) else: module_detail_query.update({'member_of': gst_announced_unit_id}) ''' units_under_module = node_collection.find(module_detail_query).sort('last_update', -1) context_variable.update({'units_under_module': units_under_module}) units_sort_list = get_attribute_value(node_id, 'items_sort_list') if units_sort_list: context_variable.update({'units_sort_list': units_sort_list}) else: context_variable.update({'units_sort_list': list(units_under_module)}) template = 'ndf/module_detail.html' return render_to_response( template, context_variable, context_instance=RequestContext(request))
def unit_create_edit(request, group_id, unit_group_id=None): ''' creation as well as eit of units ''' parent_group_name, parent_group_id = Group.get_group_name_id(group_id) unit_node = None if request.method == "GET": unit_node = node_collection.one({'_id': ObjectId(unit_group_id)}) template = "ndf/create_unit.html" all_groups = node_collection.find({'_type': "Group"}, {"name": 1}) all_groups_names = [str(each_group.name) for each_group in all_groups] modules = GSystem.query_list('home', 'Module', request.user.id) context_variables = { 'group_id': parent_group_id, 'groupid': parent_group_id, 'all_groups_names': all_groups_names, 'modules': modules } if unit_node: # get all modules which are parent's of this unit/group parent_modules = node_collection.find({ '_type': 'GSystem', 'member_of': gst_module_id, 'collection_set': { '$in': [unit_node._id] } }) context_variables.update({ 'unit_node': unit_node, 'title': 'Create Unit', 'module_val_list': [str(pm._id) for pm in parent_modules] }) req_context = RequestContext(request, context_variables) return render_to_response(template, req_context) elif request.method == "POST": group_name = request.POST.get('name', '') group_altnames = request.POST.get('altnames', '') unit_id_post = request.POST.get('node_id', '') unit_altnames = request.POST.get('altnames', '') content = request.POST.get('content', '') tags = request.POST.get('tags', []) language = request.POST.get('lan', '') educationallevel_val = request.POST.get('educationallevel', '') educationalsubject_val = request.POST.get('educationalsubject', '') # unit_group_id = unit_id_post if unit_id_post else unit_group_id # unit_group_name, unit_group_id = Group.get_group_name_id(unit_group_id) if unit_id_post: unit_node = node_collection.one({'_id': ObjectId(unit_id_post)}) success_flag = False if unit_node: if unit_node.altnames is not unit_altnames: unit_node.altnames = unit_altnames success_flag = True else: unit_group = CreateGroup(request) result = unit_group.create_group(group_name, group_id=parent_group_id, member_of=gst_base_unit_id, node_id=unit_group_id) success_flag = result[0] unit_node = result[1] unit_id = unit_node._id if language: language_val = get_language_tuple(unicode(language)) unit_node.language = language_val if educationallevel_val and "choose" not in educationallevel_val.lower( ): educationallevel_at = node_collection.one({ '_type': 'AttributeType', 'name': "educationallevel" }) create_gattribute(unit_node._id, educationallevel_at, educationallevel_val) if educationalsubject_val and "choose" not in educationalsubject_val.lower( ): educationalsubject_at = node_collection.one({ '_type': 'AttributeType', 'name': "educationalsubject" }) create_gattribute(unit_node._id, educationalsubject_at, educationalsubject_val) # modules module_val = request.POST.getlist('module', []) # get all modules which are parent's of this unit/group parent_modules = node_collection.find({ '_type': 'GSystem', 'member_of': gst_module_id, 'collection_set': { '$in': [unit_id] } }) # check for any mismatch in parent_modules and module_val if parent_modules or module_val: # import ipdb; ipdb.set_trace() module_oid_list = [ObjectId(m) for m in module_val if m] parent_modules_oid_list = [o._id for o in parent_modules] # summing all ids to iterate over oids_set = set(module_oid_list + parent_modules_oid_list) for each_oid in oids_set: if each_oid not in module_oid_list: # it is an old module existed with curent unit. # remove current node's id from it's collection_set # existing deletion each_node_obj = Node.get_node_by_id(each_oid) each_node_obj_cs = each_node_obj.collection_set each_node_obj_cs.pop(each_node_obj_cs.index(unit_id)) each_node_obj.collection_set = each_node_obj_cs each_node_obj.save(group_id=group_id) elif each_oid not in parent_modules_oid_list: # if this id does not exists with existing parent's id list # then add current node_id in collection_set of each_oid. # new addition each_node_obj = Node.get_node_by_id(each_oid) if unit_id not in each_node_obj.collection_set: each_node_obj.collection_set.append(unit_id) each_node_obj.save(group_id=group_id) if not success_flag: return HttpResponseRedirect( reverse('list_units', kwargs={ 'group_id': parent_group_id, 'groupid': parent_group_id, })) # if tags: # if not type(tags) is list: # tags = [unicode(t.strip()) for t in tags.split(",") if t != ""] # unit_node.tags = tags if tags: tags = json.loads(tags) else: tags = [] # unit_node.tags = tags unit_node.fill_gstystem_values(tags=tags, author_set=unit_node.author_set) unit_node.content = content tab_name = request.POST.get('tab_name', '') section_name = request.POST.get('section_name', '') subsection_name = request.POST.get('subsection_name', '') if tab_name: unit_node['project_config'].update({"tab_name": tab_name}) elif "base_unit" in unit_node.member_of_names_list or "announced_unit" in unit_node.member_of_names_list: unit_node['project_config'].update({"tab_name": "Lessons"}) else: unit_node['project_config'].update({"tab_name": "Tab Name"}) if section_name: unit_node['project_config'].update({"section_name": section_name}) elif "base_unit" in unit_node.member_of_names_list or "announced_unit" in unit_node.member_of_names_list: unit_node['project_config'].update({"section_name": "Lesson"}) else: unit_node['project_config'].update({"section_name": "Section"}) if subsection_name: unit_node['project_config'].update( {"subsection_name": subsection_name}) elif "base_unit" in unit_node.member_of_names_list or "announced_unit" in unit_node.member_of_names_list: unit_node['project_config'].update( {"subsection_name": "Add from Activities"}) else: unit_node['project_config'].update( {"subsection_name": "Add SubSection"}) unit_node.save() return HttpResponseRedirect( reverse('course_about', kwargs={'group_id': unit_node._id}))
def lesson_create_edit(request, group_id, unit_group_id=None): ''' creation as well as edit of lessons returns following: { 'success': <BOOL: 0 or 1>, 'unit_hierarchy': <unit hierarchy json>, 'msg': <error msg or objectid of newly created obj> } ''' # parent_group_name, parent_group_id = Group.get_group_name_id(group_id) # parent unit id lesson_id = request.POST.get('lesson_id', None) lesson_language = request.POST.get('sel_lesson_lang','') unit_id_post = request.POST.get('unit_id', '') lesson_content = request.POST.get('lesson_desc', '') # print "lesson_id: ", lesson_id # print "lesson_language: ", lesson_language # print "unit_id_post: ", unit_id_post unit_group_id = unit_id_post if unit_id_post else unit_group_id # getting parent unit object unit_group_obj = Group.get_group_name_id(unit_group_id, get_obj=True) result_dict = {'success': 0, 'unit_hierarchy': [], 'msg': ''} if request.method == "POST": # lesson name lesson_name = request.POST.get('name', '').strip() if not lesson_name: msg = 'Name can not be empty.' result_dict = {'success': 0, 'unit_hierarchy': [], 'msg': msg} # return HttpResponse(0) # check for uniqueness of name # unit_cs: unit collection_set unit_cs_list = unit_group_obj.collection_set unit_cs_objs_cur = Node.get_nodes_by_ids_list(unit_cs_list) if unit_cs_objs_cur: unit_cs_names_list = [u.name for u in unit_cs_objs_cur] if not lesson_id and unit_cs_objs_cur and lesson_name in unit_cs_names_list: # same name activity # currently following logic was only for "en" nodes. # commented and expecting following in future: # check for uniqueness w.r.t language selected within all sibling lessons's translated nodes # lesson_obj = Node.get_node_by_id(lesson_id) # if lesson_language != lesson_obj.language[0]: # if lesson_language: # language = get_language_tuple(lesson_language) # lesson_obj.language = language # lesson_obj.save() msg = u'Activity with same name exists in lesson: ' + unit_group_obj.name result_dict = {'success': 0, 'unit_hierarchy': [], 'msg': msg} elif lesson_id and ObjectId.is_valid(lesson_id): # Update # getting default, "en" node: if lesson_language != "en": node = translated_node_id = None grel_node = triple_collection.one({ '_type': 'GRelation', 'subject': ObjectId(lesson_id), 'relation_type': rt_translation_of._id, 'language': get_language_tuple(lesson_language), # 'status': 'PUBLISHED' }) if grel_node: # grelation found. # transalated node exists. # edit of existing translated node. # node = Node.get_node_by_id(grel_node.right_subject) # translated_node_id = node._id lesson_id = grel_node.right_subject else: # grelation NOT found. # create transalated node. user_id = request.user.id new_lesson_obj = node_collection.collection.GSystem() new_lesson_obj.fill_gstystem_values(name=lesson_name, content=lesson_content, member_of=gst_lesson_id, group_set=unit_group_obj._id, created_by=user_id, status=u'PUBLISHED') # print new_lesson_obj if lesson_language: language = get_language_tuple(lesson_language) new_lesson_obj.language = language new_lesson_obj.save(groupid=group_id) trans_grel_list = [ObjectId(new_lesson_obj._id)] trans_grels = triple_collection.find({'_type': 'GRelation', \ 'relation_type': rt_translation_of._id,'subject': ObjectId(lesson_id)},{'_id': 0, 'right_subject': 1}) for each_rel in trans_grels: trans_grel_list.append(each_rel['right_subject']) # translate_grel = create_grelation(node_id, rt_translation_of, trans_grel_list, language=language) create_grelation(lesson_id, rt_translation_of, trans_grel_list, language=language) lesson_obj = Node.get_node_by_id(lesson_id) if lesson_obj and (lesson_obj.name != lesson_name): trans_lesson = get_lang_node(lesson_obj._id,lesson_language) if trans_lesson: trans_lesson.name = lesson_name else: lesson_obj.name = lesson_name # if lesson_language: # language = get_language_tuple(lesson_language) # lesson_obj.language = language lesson_obj.save(group_id=group_id) unit_structure = get_unit_hierarchy(unit_group_obj, request.LANGUAGE_CODE) msg = u'Lesson name updated.' result_dict = {'success': 1, 'unit_hierarchy': unit_structure, 'msg': str(lesson_obj._id)} else: unit_structure = get_unit_hierarchy(unit_group_obj, request.LANGUAGE_CODE) msg = u'Nothing to update.' result_dict = {'success': 1, 'unit_hierarchy': unit_structure, 'msg': msg} else: # creating a fresh lesson object user_id = request.user.id new_lesson_obj = node_collection.collection.GSystem() new_lesson_obj.fill_gstystem_values(name=lesson_name, content=lesson_content, member_of=gst_lesson_id, group_set=unit_group_obj._id, created_by=user_id, status=u'PUBLISHED') # print new_lesson_obj if lesson_language: language = get_language_tuple(lesson_language) new_lesson_obj.language = language new_lesson_obj.save(groupid=group_id) unit_group_obj.collection_set.append(new_lesson_obj._id) unit_group_obj.save(groupid=group_id) unit_structure = get_unit_hierarchy(unit_group_obj, request.LANGUAGE_CODE) msg = u'Added lesson under lesson: ' + unit_group_obj.name result_dict = {'success': 1, 'unit_hierarchy': unit_structure, 'msg': str(new_lesson_obj._id)} # return HttpResponse(json.dumps(unit_structure)) # return HttpResponse(1) return HttpResponse(json.dumps(result_dict))
def lesson_create_edit(request, group_id, unit_group_id=None): ''' creation as well as edit of lessons returns following: { 'success': <BOOL: 0 or 1>, 'unit_hierarchy': <unit hierarchy json>, 'msg': <error msg or objectid of newly created obj> } ''' # parent_group_name, parent_group_id = Group.get_group_name_id(group_id) # parent unit id lesson_id = request.POST.get('lesson_id', None) lesson_language = request.POST.get('sel_lesson_lang', '') unit_id_post = request.POST.get('unit_id', '') lesson_content = request.POST.get('lesson_desc', '') # print "lesson_id: ", lesson_id # print "lesson_language: ", lesson_language # print "unit_id_post: ", unit_id_post unit_group_id = unit_id_post if unit_id_post else unit_group_id # getting parent unit object unit_group_obj = Group.get_group_name_id(unit_group_id, get_obj=True) result_dict = {'success': 0, 'unit_hierarchy': [], 'msg': ''} if request.method == "POST": # lesson name lesson_name = request.POST.get('name', '').strip() if not lesson_name: msg = 'Name can not be empty.' result_dict = {'success': 0, 'unit_hierarchy': [], 'msg': msg} # return HttpResponse(0) # check for uniqueness of name # unit_cs: unit collection_set unit_cs_list = unit_group_obj.collection_set unit_cs_objs_cur = Node.get_nodes_by_ids_list(unit_cs_list) if unit_cs_objs_cur: unit_cs_names_list = [u.name for u in unit_cs_objs_cur] if not lesson_id and unit_cs_objs_cur and lesson_name in unit_cs_names_list: # same name activity # currently following logic was only for "en" nodes. # commented and expecting following in future: # check for uniqueness w.r.t language selected within all sibling lessons's translated nodes # lesson_obj = Node.get_node_by_id(lesson_id) # if lesson_language != lesson_obj.language[0]: # if lesson_language: # language = get_language_tuple(lesson_language) # lesson_obj.language = language # lesson_obj.save() msg = u'Activity with same name exists in lesson: ' + unit_group_obj.name result_dict = {'success': 0, 'unit_hierarchy': [], 'msg': msg} elif lesson_id and ObjectId.is_valid(lesson_id): # Update # getting default, "en" node: if lesson_language != "en": node = translated_node_id = None grel_node = triple_collection.one({ '_type': 'GRelation', 'subject': ObjectId(lesson_id), 'relation_type': rt_translation_of._id, 'language': get_language_tuple(lesson_language), # 'status': 'PUBLISHED' }) if grel_node: # grelation found. # transalated node exists. # edit of existing translated node. # node = Node.get_node_by_id(grel_node.right_subject) # translated_node_id = node._id lesson_id = grel_node.right_subject else: # grelation NOT found. # create transalated node. user_id = request.user.id new_lesson_obj = node_collection.collection.GSystem() new_lesson_obj.fill_gstystem_values( name=lesson_name, content=lesson_content, member_of=gst_lesson_id, group_set=unit_group_obj._id, created_by=user_id, status=u'PUBLISHED') # print new_lesson_obj if lesson_language: language = get_language_tuple(lesson_language) new_lesson_obj.language = language new_lesson_obj.save(groupid=group_id) trans_grel_list = [ObjectId(new_lesson_obj._id)] trans_grels = triple_collection.find({'_type': 'GRelation', \ 'relation_type': rt_translation_of._id,'subject': ObjectId(lesson_id)},{'_id': 0, 'right_subject': 1}) for each_rel in trans_grels: trans_grel_list.append(each_rel['right_subject']) # translate_grel = create_grelation(node_id, rt_translation_of, trans_grel_list, language=language) create_grelation(lesson_id, rt_translation_of, trans_grel_list, language=language) lesson_obj = Node.get_node_by_id(lesson_id) if lesson_obj and (lesson_obj.name != lesson_name): trans_lesson = get_lang_node(lesson_obj._id, lesson_language) if trans_lesson: trans_lesson.name = lesson_name else: lesson_obj.name = lesson_name # if lesson_language: # language = get_language_tuple(lesson_language) # lesson_obj.language = language lesson_obj.save(group_id=group_id) unit_structure = get_unit_hierarchy(unit_group_obj, request.LANGUAGE_CODE) msg = u'Lesson name updated.' result_dict = { 'success': 1, 'unit_hierarchy': unit_structure, 'msg': str(lesson_obj._id) } else: unit_structure = get_unit_hierarchy(unit_group_obj, request.LANGUAGE_CODE) msg = u'Nothing to update.' result_dict = { 'success': 1, 'unit_hierarchy': unit_structure, 'msg': msg } else: # creating a fresh lesson object user_id = request.user.id new_lesson_obj = node_collection.collection.GSystem() new_lesson_obj.fill_gstystem_values(name=lesson_name, content=lesson_content, member_of=gst_lesson_id, group_set=unit_group_obj._id, created_by=user_id, status=u'PUBLISHED') # print new_lesson_obj if lesson_language: language = get_language_tuple(lesson_language) new_lesson_obj.language = language new_lesson_obj.save(groupid=group_id) unit_group_obj.collection_set.append(new_lesson_obj._id) unit_group_obj.save(groupid=group_id) unit_structure = get_unit_hierarchy(unit_group_obj, request.LANGUAGE_CODE) msg = u'Added lesson under lesson: ' + unit_group_obj.name result_dict = { 'success': 1, 'unit_hierarchy': unit_structure, 'msg': str(new_lesson_obj._id) } # return HttpResponse(json.dumps(unit_structure)) # return HttpResponse(1) return HttpResponse(json.dumps(result_dict))
def get_course_content_hierarchy(unit_group_obj,lang="en"): ''' ARGS: unit_group_obj Result will be of following form: { name: 'Lesson1', type: 'lesson', id: 'l1', activities: [ { name: 'Activity 1', type: 'activity', id: 'a1' }, { name: 'Activity 1', type: 'activity', id: 'a2' } ] }, { name: 'Lesson2', type: 'lesson', id: 'l2', activities: [ { name: 'Activity 1', type: 'activity', id: 'a1' } ] } ''' unit_structure = [] for each in unit_group_obj.collection_set: lesson_dict ={} lesson = Node.get_node_by_id(each) if lesson: trans_lesson = get_lang_node(lesson._id,lang) if trans_lesson: lesson_dict['label'] = trans_lesson.name else: lesson_dict['label'] = lesson.name lesson_dict['id'] = lesson._id lesson_dict['type'] = 'unit-name' lesson_dict['children'] = [] if lesson.collection_set: for each_act in lesson.collection_set: activity_dict ={} activity = Node.get_node_by_id(each_act) if activity: trans_act_name = get_lang_node(each_act,lang) # activity_dict['label'] = trans_act_name.name or activity.name if trans_act_name: activity_dict['label'] = trans_act_name.altnames or trans_act_name.name # activity_dict['label'] = trans_act_name.name else: # activity_dict['label'] = activity.name activity_dict['label'] = activity.altnames or activity.name activity_dict['type'] = 'activity-group' activity_dict['id'] = str(activity._id) lesson_dict['children'].append(activity_dict) unit_structure.append(lesson_dict) return unit_structure