Exemple #1
0
def all_under_moderation(request, group_id):
	from gnowsys_ndf.ndf.views.group import CreateModeratedGroup, CreateEventGroup, CreateGroup

	group_obj = get_group_name_id(group_id, get_obj=True)
	if not group_obj.edit_policy == 'EDITABLE_MODERATED':
		raise Http404('Group is not EDITABLE_MODERATED')
	list_of_sg_mn = get_sg_member_of(group_id)
	# mod_group_instance = CreateGroup(request)
	# print "\n\n list_of_sg_mn",list_of_sg_mn
	# list_of_sg_mn = mod_group_instance.get_all_subgroups_member_of_list(group_obj._id)
	if "ProgramEventGroup" in list_of_sg_mn:
		sg_member_of = "ProgramEventGroup"
		mod_group_instance = CreateEventGroup(request)
	elif "CourseEventGroup" in list_of_sg_mn:
		sg_member_of = "CourseEventGroup"
		mod_group_instance = CreateEventGroup(request)
	elif "ModeratingGroup" in list_of_sg_mn:
		sg_member_of = "ModeratingGroup"
		mod_group_instance = CreateModeratedGroup(request)

	group_hierarchy_result = mod_group_instance.get_all_group_hierarchy(group_obj._id,sg_member_of)
	group_hierarchy_obj_list = []

	if group_hierarchy_result[0]:
		group_hierarchy_obj_list = group_hierarchy_result[1]
		group_hierarchy_id_list = [g._id for g in group_hierarchy_obj_list]

		file_gst = node_collection.one({'_type': 'GSystemType', 'name': 'File'})
		page_gst = node_collection.one({'_type': 'GSystemType', 'name': 'Page'})

		all_resources = node_collection.find({'member_of': {'$in': [file_gst._id, page_gst._id]}, 'group_set': {'$in': group_hierarchy_id_list[1:]} })

		# print "=== ", res_cur.count()
		# print [x.name for x in all_resources]

		return render_to_response('ndf/all_under_moderation_status.html', {
			"group_id": group_id, "groupid": group_id, "title": "All Under Moderation Resources",
			"files": all_resources, "group_hierarchy_obj_list": group_hierarchy_obj_list,
			"detail_urlname": "moderation_status", "filetype": "all", "dont_show_error": True
			}, RequestContext(request))

	else:
		raise Http404('Group is not EDITABLE_MODERATED')
Exemple #2
0
def get_moderator_group_set(node_group_set, curr_group_id, get_details=False):
	'''
	Returns the "group_set".
	Takes two arguments:
	- node_group_set: existing/current group_set of node object.
	- curr_group_id: current group in which this node resides.
	Pass the deep copy of group_set and not the reference.
	e.g:
	updated_group_set = get_moderator_group_set(node_group_set[:], group_id)
	------------
	if there is need of extra information along with group_set, pass <get_details=True> as last arg.
	e.g:
	updated_group_set = get_moderator_group_set(node_group_set[:], group_id, get_details=True)
	Along with group_set following details will be returned in DICT format:
	{
		"updated_group_set": updated_group_set,
		"is_group_set_updated": is_group_set_updated,
		"removed_group_id": removed_group_id,
		"newly_appended_group_id": newly_appended_group_id,
		"newly_appended_group_name": newly_appended_group_name,
		"is_new_group_top_group": is_new_group_top_group
	}
	'''

	curr_group_obj = node_collection.one({'_id': ObjectId(curr_group_id)})
	group_set = node_group_set[:]
	is_group_set_updated = False
	is_new_group_top_group = False

	# initializing dict with defaults:
	details_dict = {
		"updated_group_set": group_set,
		"is_group_set_updated": is_group_set_updated,
		"removed_group_id": None,
		"newly_appended_group_id": None,
		"newly_appended_group_name": None,
		"is_new_group_top_group": is_new_group_top_group
	}

	# check if current group having edit policy of EDITABLE_MODERATED.
	# if no return group_set as it was
	if not curr_group_obj.edit_policy == 'EDITABLE_MODERATED':
		if get_details:
			return details_dict
		else:
			return node_group_set

	# ---| getting appropriate member_of group |---
	# for top level of moderated group
	list_of_sg_member_of = get_sg_member_of(curr_group_obj._id)

	if "ModeratingGroup" in list_of_sg_member_of:
		member_of = node_collection.one({'_type': 'GSystemType', 'name': u'ModeratingGroup'})

	elif 'ProgramEventGroup' in list_of_sg_member_of:
		member_of = node_collection.one({'_type': 'GSystemType', 'name': u'ProgramEventGroup'})

	elif 'CourseEventGroup' in list_of_sg_member_of:
		member_of = node_collection.one({'_type': 'GSystemType', 'name': u'CourseEventGroup'})

    # for sub-group falling under one of following categories:
	# elif curr_group_obj.member_of_names_list[0] in ['PartnerGroup', 'ModeratingGroup']:
	# 	member_of = node_collection.one({'_id': curr_group_obj.member_of[0]})

    # final fallback option
	else:
    	# GST of "ModeratingGroup"
		member_of = node_collection.one({'_type': 'GSystemType', 'name': u'ModeratingGroup'})
    # getting sub-group having:
    # curr_group in prior_node
    # and member_of as fetched above
    # and moderation_level > -1
	sub_mod_group_obj = node_collection.one({
                        '_type': 'Group',
                        'prior_node': {'$in': [ObjectId(curr_group_obj._id)]},
                        'member_of': {'$in': [ObjectId(member_of._id)]},
                        'moderation_level': {'$gt': -1}
                        })
	# print "curr_group_obj._id : ", curr_group_obj._id
	# print "member_of._id : ", member_of._id
	# print "sub_mod_group_obj.name : ", sub_mod_group_obj.name

	# proper sub-group found
	if sub_mod_group_obj:

		if ObjectId(curr_group_id) in group_set:
    		# remove current group's _id
			removed_group_id = group_set.pop(group_set.index(ObjectId(curr_group_id)))

		if not ObjectId(sub_mod_group_obj._id) in group_set:
			# add next/sub-group's _id
			group_set.append(sub_mod_group_obj._id)
			newly_appended_group_id = sub_mod_group_obj._id.__str__()
			newly_appended_group_name = sub_mod_group_obj.name
			is_group_set_updated = True

	# if no sub-group found or it's last sub-group of hierarchy
	else:
		mod_group_instance = CreateModeratedGroup(request.HttpRequest())
		is_top_group, top_group_obj = mod_group_instance.get_top_group_of_hierarchy(curr_group_id)
		# print "==== ", is_top_group
		# print "==== ", top_group_obj

		if ObjectId(curr_group_id) in group_set:
			# remove current group's _id
			removed_group_id = group_set.pop(group_set.index(ObjectId(curr_group_id)))

		if is_top_group and (not ObjectId(top_group_obj._id) in group_set):
			# add parent/top group's _id
			group_set.append(top_group_obj._id)
			newly_appended_group_id = top_group_obj._id.__str__()
			newly_appended_group_name = top_group_obj.name
			is_group_set_updated = True
			is_new_group_top_group = True

	if get_details:
		details_dict = {
			"updated_group_set": group_set,
			"is_group_set_updated": is_group_set_updated,
			"removed_group_id": removed_group_id,
			"newly_appended_group_id": newly_appended_group_id,
			"newly_appended_group_name": newly_appended_group_name,
			"is_new_group_top_group": is_new_group_top_group
		}
		return details_dict

	# print group_set
	return group_set
Exemple #3
0
def moderation_status(request, group_id, node_id, get_only_response_dict=False):

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

	node = node_collection.one({'_id': ObjectId(node_id)})

	if not node:  # invalid ObjectId
		return render_to_response('ndf/under_moderation.html', {
		'group_id': group_id, 'groupid': group_id, 'title': 'Under Moderation Status',
		}, RequestContext(request))

	node_status = node.status
	node_group_set = node.group_set
	current_mod_group_obj = None
	group_hierarchy_obj_list = []
	is_under_moderation = True
	top_group_obj = None
	cleared_group_objs = []
	next_mod_group_objs = []
	group_obj = node_collection.one({'_id': ObjectId(group_id)})
	mod_group_instance = CreateModeratedGroup(request)
	# list_of_sg_mn = mod_group_instance.get_all_subgroups_member_of_list(group_obj._id)
	# list_of_sg_member_of = get_sg_member_of(group_obj._id)
	# print "\n\nlist_of_sg_mn-----",list_of_sg_member_of

	# selected_group = None

	for each_group_id in node_group_set:
		each_group_obj = node_collection.one({'_id': ObjectId(each_group_id), '_type': 'Group'})
		if each_group_obj:
			# selected_group = each_group_obj._id
			selected_group_obj = each_group_obj

	# selected_group = selected_group if selected_group else group_id
	selected_group_obj = selected_group_obj if selected_group_obj else group_obj
	# selected_group_obj = node_collection.one({'_id': ObjectId(selected_group)})
	list_of_sg_member_of = []
	# To prevent error if resource is pulished in top_level_group
	if "Group" in selected_group_obj.member_of_names_list:
		list_of_sg_member_of = get_sg_member_of(selected_group_obj._id)

	# Based on the resource's current group's member_of
	# or if resource is in top_level_group, based on its sg_member_of
	if "ModeratingGroup" in selected_group_obj.member_of_names_list or "ModeratingGroup" in list_of_sg_member_of or selected_group_obj.name == "home":
		sg_member_of = "ModeratingGroup"
		mod_group_instance = CreateModeratedGroup(request)
	elif "ProgramEventGroup" in selected_group_obj.member_of_names_list or "ProgramEventGroup" in list_of_sg_member_of:
		sg_member_of = "ProgramEventGroup"
		mod_group_instance = CreateEventGroup(request)
	elif "CourseEventGroup" in selected_group_obj.member_of_names_list or "CourseEventGroup" in list_of_sg_member_of:
		sg_member_of = "CourseEventGroup"
		mod_group_instance = CreateEventGroup(request)

	# group_hierarchy_result = mod_group_instance.get_all_group_hierarchy(selected_group,sg_member_of)
	# print "\n sg_member_of",sg_member_of
	group_hierarchy_result = mod_group_instance.get_all_group_hierarchy(selected_group_obj._id,sg_member_of)
	# returns result in <True, all_sub_group_list> format
	# print "\n\n group_hierarchy_result",group_hierarchy_result
	if group_hierarchy_result[0]:
		group_hierarchy_obj_list = group_hierarchy_result[1]
		group_hierarchy_id_list = [g._id for g in group_hierarchy_obj_list]
		group_hierarchy_names_list = [str(g.altnames) if g.altnames else g.name for g in group_hierarchy_obj_list]
		top_group_id = group_hierarchy_id_list[0]
		top_group_obj = group_hierarchy_obj_list[0]
		# cntr = 0
		# for each_group_id in node_group_set:
		# 	cntr += 1
		# 	if each_group_id in group_hierarchy_id_list:
		# 		if ObjectId(each_group_id) == ObjectId(top_group_id):
		# 			is_under_moderation = False
		# 		else:
		# 			current_mod_group_obj = group_hierarchy_obj_list[cntr+1]
		# 			is_under_moderation = True
		if selected_group_obj != top_group_obj:
			current_mod_group_obj = selected_group_obj
			is_under_moderation = True
		else:
			is_under_moderation = False

		if current_mod_group_obj:
			current_group_index = None
			try:
				current_group_index = group_hierarchy_names_list.index(current_mod_group_obj.name)
			except ValueError as e:
				current_group_index = group_hierarchy_names_list.index(current_mod_group_obj.altnames)

			if current_group_index:
				cleared_group_objs = group_hierarchy_names_list[1:current_group_index]
				next_mod_group_objs = group_hierarchy_names_list[current_group_index+1:]
	elif node_status == u'MODERATION':
		is_under_moderation = True
	else:
		is_under_moderation = False

	# print "is_under_moderation : ", is_under_moderation
	# print "=== ", current_mod_group_obj.name
	# print "\n\n cleared_group_objs",cleared_group_objs
	# print "\n\n next_mod_group_objs",next_mod_group_objs

	response_dict = {
		'group_id': group_id, 'groupid': group_id, 'node': node, 'title': 'Under Moderation Status',
		'is_under_moderation': is_under_moderation, 'current_mod_group_obj': current_mod_group_obj,
		'group_hierarchy_obj_list': json.dumps(group_hierarchy_obj_list,cls=NodeJSONEncoder), 'top_group_obj': top_group_obj,
		'group_obj': group_obj, 'next_mod_group_objs':next_mod_group_objs,
		'cleared_group_objs':cleared_group_objs
	}

	if get_only_response_dict:
		return response_dict

	return render_to_response('ndf/under_moderation.html', response_dict, RequestContext(request))
Exemple #4
0
def approve_resource(request, group_id):
	'''
	Method to approve resorce.
	Means resource will get published by moderator to next moderated or parent group.
	'''
	group_obj = get_group_name_id(group_id, get_obj=True)
	node_id = request.POST.get('node_oid', '')
	node_obj = node_collection.one({'_id': ObjectId(node_id)})
	approve_or_reject = request.POST.get('app_rej_state', '')
	flag = 0  # good to check at JS/front-end level
	if approve_or_reject == "Approve":
		if node_obj:
			node_group_set = node_obj.group_set
			# task_id = get_relation_value(node_obj._id,"has_current_approval_task")
			# make deep copy of object and not to copy it's reference with [:].
			group_set_details_dict = get_moderator_group_set(node_group_set[:], group_id, get_details=True)
			updated_group_set = group_set_details_dict['updated_group_set']
			# print "==== updated_group_set : ", updated_group_set
			# print "==== node_group_set : ", node_group_set
			# print "==== group_set_details_dict : ", group_set_details_dict

			# if set(node_group_set) != set(updated_group_set):
			if group_set_details_dict['is_group_set_updated']:

				node_obj.group_set = updated_group_set

				# ---| checking for top group. \
				# If not top group and it's fond to be sub group create task |---
				# one way:
				# group_obj = get_group_name_id(updated_group_set[len(updated_group_set) - 1], get_obj=True)
				# print "===== group_obj.member_of_names_list : ", group_obj.member_of_names_list
				# if group_obj.member_of_names_list[0] in ['ProgramEventGroup', 'CourseEventGroup', 'PartnerGroup', 'ModeratingGroup']:
				# second way:
				if group_set_details_dict['is_new_group_top_group']:
					# means, resource is passed through curation flow and \
					# therefore change the status from 'MODERATION' to 'PUBLISHED'
					node_obj.status = u'PUBLISHED'

					# intimate creator of object/resource and creator of parent group
					node_creator_username = User.objects.get(id=node_obj.created_by).username

					task_content_org = u"Congratulations " + unicode(node_creator_username) + \
									u",\n\n Your contribution is moderated and it's published to " + \
									group_set_details_dict['newly_appended_group_name'] + \
									u". \n\nWe appreciate your efforts and thank you for your contribution!"
					create_moderator_task(request, \
						group_set_details_dict['newly_appended_group_id'],\
						 node_obj._id, task_type_creation='multiple', \
						 task_type='Other', task_content_org=task_content_org,\
						 created_by_name=node_creator_username)
				else:
					# resource is in curation flow hence, create a task
					create_moderator_task(request, \
						group_set_details_dict['newly_appended_group_id'],\
						 node_obj._id)
				# node_obj.modified_by = int(request.user.id)
				node_obj.save(groupid=group_id)

			flag = 1
		else:
			flag = 0

	elif approve_or_reject == "Reject":
		reject_reason_msg = request.POST.get('reject_reason', '')
		# print "reject_reason_msg----", reject_reason_msg
		# raise Exception("bb")
		# task_node,task_rt = get_relation_value(node_obj._id,"has_current_approval_task")
		grel_dict = get_relation_value(node_obj._id,"has_current_approval_task")
		is_cursor = grel_dict.get("cursor",False)
		if not is_cursor:
			task_node = grel_dict.get("grel_node")
			task_rt = grel_dict.get("grel_id")

		auth_grp = node_collection.one({'_type': "Author", 'created_by': int(node_obj.created_by)})
		node_obj.group_set = [auth_grp._id]
		node_obj.status = u"DRAFT"
		node_obj.save()

		# is_top_group, top_group_obj = get_top_group_of_hierarchy(group_obj._id)
		mod_group_instance = CreateModeratedGroup(request)
		# is_top_group, top_group_obj = mod_group_instance.get_top_group_of_hierarchy(curr_group_id)
		is_top_group, top_group_obj = mod_group_instance.get_top_group_of_hierarchy(group_obj._id)

		list_of_recipients_ids = []
		list_of_recipients_ids.extend(group_obj.group_admin)
		list_of_recipients_ids.extend(top_group_obj.group_admin)
		list_of_recipients_ids.append(node_obj.created_by)
		# print list_of_recipients_ids

		if task_node:
			task_content_org = u"\n\nThis task is CLOSED.\n " \
						"The resource associated with Moderation Task has been REJECTED. \n"
			task_dict = {
				"name": task_node.name,
				"_id" : ObjectId(task_node._id),
				"created_by": node_obj.created_by,
				"modified_by": request.user.id,
				"contributors": [request.user.id],
				"content_org": unicode(task_content_org),
				"created_by_name": unicode(request.user.username),
				"Status": u"CLOSED",
				"Priority": u"Normal",
				"Assignee": list(group_obj.group_admin[:]),
				# "has_type": task_type_list
			}
			task_obj = create_task(task_dict, 'group')

		# Sending notification to all watchers about the updates of the task
		try:
			for each_user_id in list_of_recipients_ids:
				activ = "Contribution to " + group_obj.name +"."
				mail_content = u"\n The resource "+ node_obj.name +" is REJECTED by " \
							 + request.user.username + ". \n" \
							 + "Reason specified: "+ unicode(reject_reason_msg)
				user_obj = User.objects.get(id=int(each_user_id))
				set_notif_val(request, group_obj._id, mail_content, activ, user_obj)
		except Exception as e:
			print "\n Unable to send notifications ",e
		flag = 1
	return HttpResponse(flag)
Exemple #5
0
def get_moderator_group_set(node_group_set, curr_group_id, get_details=False):
	'''
	Returns the "group_set".
	Takes two arguments:
	- node_group_set: existing/current group_set of node object.
	- curr_group_id: current group in which this node resides.
	Pass the deep copy of group_set and not the reference.
	e.g: 
	updated_group_set = get_moderator_group_set(node_group_set[:], group_id)
	------------
	if there is need of extra information along with group_set, pass <get_details=True> as last arg.
	e.g:
	updated_group_set = get_moderator_group_set(node_group_set[:], group_id, get_details=True)
	Along with group_set following details will be returned in DICT format:
	{
		"updated_group_set": updated_group_set,
		"is_group_set_updated": is_group_set_updated,
		"removed_group_id": removed_group_id,
		"newly_appended_group_id": newly_appended_group_id,
		"newly_appended_group_name": newly_appended_group_name,
		"is_new_group_top_group": is_new_group_top_group
	}
	'''

	curr_group_obj = node_collection.one({'_id': ObjectId(curr_group_id)})
	group_set = node_group_set[:]
	is_group_set_updated = False
	is_new_group_top_group = False

	# initializing dict with defaults:
	details_dict = {
		"updated_group_set": group_set,
		"is_group_set_updated": is_group_set_updated,
		"removed_group_id": None,
		"newly_appended_group_id": None,
		"newly_appended_group_name": None,
		"is_new_group_top_group": is_new_group_top_group
	}

	# check if current group having edit policy of EDITABLE_MODERATED.
	# if no return group_set as it was
	if not curr_group_obj.edit_policy == 'EDITABLE_MODERATED':
		if get_details:
			return details_dict
		else:
			return node_group_set

	# ---| getting appropriate member_of group |---
	# for top level of moderated group
	list_of_sg_member_of = get_sg_member_of(curr_group_obj._id)

	if "ModeratingGroup" in list_of_sg_member_of:
		member_of = node_collection.one({'_type': 'GSystemType', 'name': u'ModeratingGroup'})

	elif 'ProgramEventGroup' in list_of_sg_member_of:
		member_of = node_collection.one({'_type': 'GSystemType', 'name': u'ProgramEventGroup'})
	
	elif 'CourseEventGroup' in list_of_sg_member_of:
		member_of = node_collection.one({'_type': 'GSystemType', 'name': u'CourseEventGroup'})

    # for sub-group falling under one of following categories:
	# elif curr_group_obj.member_of_names_list[0] in ['PartnerGroup', 'ModeratingGroup']:
	# 	member_of = node_collection.one({'_id': curr_group_obj.member_of[0]})

    # final fallback option
	else:
    	# GST of "ModeratingGroup"
		member_of = node_collection.one({'_type': 'GSystemType', 'name': u'ModeratingGroup'})
    # getting sub-group having:
    # curr_group in prior_node 
    # and member_of as fetched above
    # and moderation_level > -1
	sub_mod_group_obj = node_collection.one({
                        '_type': 'Group',
                        'prior_node': {'$in': [ObjectId(curr_group_obj._id)]},
                        'member_of': {'$in': [ObjectId(member_of._id)]},
                        'moderation_level': {'$gt': -1}
                        })
	# print "curr_group_obj._id : ", curr_group_obj._id
	# print "member_of._id : ", member_of._id
	# print "sub_mod_group_obj.name : ", sub_mod_group_obj.name

	# proper sub-group found
	if sub_mod_group_obj:

		if ObjectId(curr_group_id) in group_set:
    		# remove current group's _id
			removed_group_id = group_set.pop(group_set.index(ObjectId(curr_group_id)))

		if not ObjectId(sub_mod_group_obj._id) in group_set:
			# add next/sub-group's _id
			group_set.append(sub_mod_group_obj._id)
			newly_appended_group_id = sub_mod_group_obj._id.__str__()
			newly_appended_group_name = sub_mod_group_obj.name
			is_group_set_updated = True

	# if no sub-group found or it's last sub-group of hierarchy
	else:
		mod_group_instance = CreateModeratedGroup(request.HttpRequest())
		is_top_group, top_group_obj = mod_group_instance.get_top_group_of_hierarchy(curr_group_id)
		# print "==== ", is_top_group
		# print "==== ", top_group_obj
		
		if ObjectId(curr_group_id) in group_set:
			# remove current group's _id
			removed_group_id = group_set.pop(group_set.index(ObjectId(curr_group_id)))
        
		if is_top_group and (not ObjectId(top_group_obj._id) in group_set):
			# add parent/top group's _id
			group_set.append(top_group_obj._id)
			newly_appended_group_id = top_group_obj._id.__str__()
			newly_appended_group_name = top_group_obj.name
			is_group_set_updated = True
			is_new_group_top_group = True
        
	if get_details:
		details_dict = {
			"updated_group_set": group_set,
			"is_group_set_updated": is_group_set_updated,
			"removed_group_id": removed_group_id,
			"newly_appended_group_id": newly_appended_group_id,
			"newly_appended_group_name": newly_appended_group_name,
			"is_new_group_top_group": is_new_group_top_group
		}
		return details_dict

	# print group_set
	return group_set
Exemple #6
0
def moderation_status(request, group_id, node_id, get_only_response_dict=False):

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

	node = node_collection.one({'_id': ObjectId(node_id)})

	if not node:  # invalid ObjectId
		return render_to_response('ndf/under_moderation.html', {
		'group_id': group_id, 'groupid': group_id, 'title': 'Under Moderation Status',
		}, RequestContext(request))

	node_status = node.status
	node_group_set = node.group_set
	current_mod_group_obj = None
	group_hierarchy_obj_list = []
	is_under_moderation = True
	top_group_obj = None
	cleared_group_objs = []
	next_mod_group_objs = []
	group_obj = node_collection.one({'_id': ObjectId(group_id)})
	mod_group_instance = CreateModeratedGroup(request)
	# list_of_sg_mn = mod_group_instance.get_all_subgroups_member_of_list(group_obj._id)
	# list_of_sg_member_of = get_sg_member_of(group_obj._id)
	# print "\n\nlist_of_sg_mn-----",list_of_sg_member_of

	# selected_group = None

	for each_group_id in node_group_set:
		each_group_obj = node_collection.one({'_id': ObjectId(each_group_id), '_type': 'Group'})
		if each_group_obj:
			# selected_group = each_group_obj._id
			selected_group_obj = each_group_obj

	# selected_group = selected_group if selected_group else group_id
	selected_group_obj = selected_group_obj if selected_group_obj else group_obj
	# selected_group_obj = node_collection.one({'_id': ObjectId(selected_group)})
	list_of_sg_member_of = []
	# To prevent error if resource is pulished in top_level_group
	if "Group" in selected_group_obj.member_of_names_list:
		list_of_sg_member_of = get_sg_member_of(selected_group_obj._id)

	# Based on the resource's current group's member_of 
	# or if resource is in top_level_group, based on its sg_member_of
	if "ModeratingGroup" in selected_group_obj.member_of_names_list or "ModeratingGroup" in list_of_sg_member_of or selected_group_obj.name == "home":
		sg_member_of = "ModeratingGroup"
		mod_group_instance = CreateModeratedGroup(request)
	elif "ProgramEventGroup" in selected_group_obj.member_of_names_list or "ProgramEventGroup" in list_of_sg_member_of:
		sg_member_of = "ProgramEventGroup"
		mod_group_instance = CreateEventGroup(request)
	elif "CourseEventGroup" in selected_group_obj.member_of_names_list or "CourseEventGroup" in list_of_sg_member_of:
		sg_member_of = "CourseEventGroup"
		mod_group_instance = CreateEventGroup(request)

	# group_hierarchy_result = mod_group_instance.get_all_group_hierarchy(selected_group,sg_member_of)
	# print "\n sg_member_of",sg_member_of
	group_hierarchy_result = mod_group_instance.get_all_group_hierarchy(selected_group_obj._id,sg_member_of)
	# returns result in <True, all_sub_group_list> format
	# print "\n\n group_hierarchy_result",group_hierarchy_result
	if group_hierarchy_result[0]:
		group_hierarchy_obj_list = group_hierarchy_result[1]
		group_hierarchy_id_list = [g._id for g in group_hierarchy_obj_list]
		group_hierarchy_names_list = [str(g.altnames) if g.altnames else g.name for g in group_hierarchy_obj_list]
		top_group_id = group_hierarchy_id_list[0]
		top_group_obj = group_hierarchy_obj_list[0]
		# cntr = 0
		# for each_group_id in node_group_set:
		# 	cntr += 1
		# 	if each_group_id in group_hierarchy_id_list:
		# 		if ObjectId(each_group_id) == ObjectId(top_group_id):
		# 			is_under_moderation = False
		# 		else:
		# 			current_mod_group_obj = group_hierarchy_obj_list[cntr+1]
		# 			is_under_moderation = True
		if selected_group_obj != top_group_obj:
			current_mod_group_obj = selected_group_obj
			is_under_moderation = True
		else:
			is_under_moderation = False

		if current_mod_group_obj:
			current_group_index = None
			try:
				current_group_index = group_hierarchy_names_list.index(current_mod_group_obj.name)
			except ValueError as e:
				current_group_index = group_hierarchy_names_list.index(current_mod_group_obj.altnames)

			if current_group_index:
				cleared_group_objs = group_hierarchy_names_list[1:current_group_index]
				next_mod_group_objs = group_hierarchy_names_list[current_group_index+1:]
	elif node_status == u'MODERATION':
		is_under_moderation = True
	else:
		is_under_moderation = False

	# print "is_under_moderation : ", is_under_moderation
	# print "=== ", current_mod_group_obj.name
	# print "\n\n cleared_group_objs",cleared_group_objs
	# print "\n\n next_mod_group_objs",next_mod_group_objs

	response_dict = {
		'group_id': group_id, 'groupid': group_id, 'node': node, 'title': 'Under Moderation Status',
		'is_under_moderation': is_under_moderation, 'current_mod_group_obj': current_mod_group_obj,
		'group_hierarchy_obj_list': json.dumps(group_hierarchy_obj_list,cls=NodeJSONEncoder), 'top_group_obj': top_group_obj,
		'group_obj': group_obj, 'next_mod_group_objs':next_mod_group_objs,
		'cleared_group_objs':cleared_group_objs
	}

	if get_only_response_dict:
		return response_dict

	return render_to_response('ndf/under_moderation.html', response_dict, RequestContext(request))
Exemple #7
0
def approve_resource(request, group_id):
	'''
	Method to approve resorce.
	Means resource will get published by moderator to next moderated or parent group.
	'''
	group_obj = get_group_name_id(group_id, get_obj=True)
	node_id = request.POST.get('node_oid', '')
	node_obj = node_collection.one({'_id': ObjectId(node_id)})
	approve_or_reject = request.POST.get('app_rej_state', '')
	flag = 0  # good to check at JS/front-end level
	if approve_or_reject == "Approve":
		if node_obj:
			node_group_set = node_obj.group_set
			# task_id = get_relation_value(node_obj._id,"has_current_approval_task")
			# make deep copy of object and not to copy it's reference with [:].
			group_set_details_dict = get_moderator_group_set(node_group_set[:], group_id, get_details=True)
			updated_group_set = group_set_details_dict['updated_group_set']
			# print "==== updated_group_set : ", updated_group_set
			# print "==== node_group_set : ", node_group_set
			# print "==== group_set_details_dict : ", group_set_details_dict

			# if set(node_group_set) != set(updated_group_set):
			if group_set_details_dict['is_group_set_updated']:
				
				node_obj.group_set = updated_group_set

				# ---| checking for top group. \
				# If not top group and it's fond to be sub group create task |---
				# one way:
				# group_obj = get_group_name_id(updated_group_set[len(updated_group_set) - 1], get_obj=True)
				# print "===== group_obj.member_of_names_list : ", group_obj.member_of_names_list
				# if group_obj.member_of_names_list[0] in ['ProgramEventGroup', 'CourseEventGroup', 'PartnerGroup', 'ModeratingGroup']:
				# second way:
				if group_set_details_dict['is_new_group_top_group']:
					# means, resource is passed through curation flow and \
					# therefore change the status from 'MODERATION' to 'PUBLISHED'
					node_obj.status = u'PUBLISHED'

					# intimate creator of object/resource and creator of parent group
					node_creator_username = User.objects.get(id=node_obj.created_by).username

					task_content_org = u"Congratulations " + unicode(node_creator_username) + \
									u",\n\n Your contribution is moderated and it's published to " + \
									group_set_details_dict['newly_appended_group_name'] + \
									u". \n\nWe appreciate your efforts and thank you for your contribution!"
					create_moderator_task(request, \
						group_set_details_dict['newly_appended_group_id'],\
						 node_obj._id, task_type_creation='multiple', \
						 task_type='Other', task_content_org=task_content_org,\
						 created_by_name=node_creator_username)
				else:
					# resource is in curation flow hence, create a task
					create_moderator_task(request, \
						group_set_details_dict['newly_appended_group_id'],\
						 node_obj._id)
				# node_obj.modified_by = int(request.user.id)
				node_obj.save(groupid=group_id)

			flag = 1
		else:
			flag = 0
		
	elif approve_or_reject == "Reject":
		reject_reason_msg = request.POST.get('reject_reason', '')
		# print "reject_reason_msg----", reject_reason_msg
		# raise Exception("bb")
		# task_node,task_rt = get_relation_value(node_obj._id,"has_current_approval_task")
		grel_dict = get_relation_value(node_obj._id,"has_current_approval_task")
		is_cursor = grel_dict.get("cursor",False)
		if not is_cursor:
			task_node = grel_dict.get("grel_node")
			task_rt = grel_dict.get("grel_id")

		auth_grp = node_collection.one({'_type': "Author", 'created_by': int(node_obj.created_by)})
		node_obj.group_set = [auth_grp._id]
		node_obj.status = u"DRAFT"
		node_obj.save()

		# is_top_group, top_group_obj = get_top_group_of_hierarchy(group_obj._id)
		mod_group_instance = CreateModeratedGroup(request)
		# is_top_group, top_group_obj = mod_group_instance.get_top_group_of_hierarchy(curr_group_id)
		is_top_group, top_group_obj = mod_group_instance.get_top_group_of_hierarchy(group_obj._id)

		list_of_recipients_ids = []
		list_of_recipients_ids.extend(group_obj.group_admin)
		list_of_recipients_ids.extend(top_group_obj.group_admin)
		list_of_recipients_ids.append(node_obj.created_by)
		# print list_of_recipients_ids

		if task_node:
			task_content_org = u"\n\nThis task is CLOSED.\n " \
						"The resource associated with Moderation Task has been REJECTED. \n"
			task_dict = {
				"name": task_node.name,
				"_id" : ObjectId(task_node._id),
				"created_by": node_obj.created_by,
				"modified_by": request.user.id,
				"contributors": [request.user.id],
				"content_org": unicode(task_content_org),
				"created_by_name": unicode(request.user.username),
				"Status": u"CLOSED",
				"Priority": u"Normal",
				"Assignee": list(group_obj.group_admin[:]),
				# "has_type": task_type_list
			}
			task_obj = create_task(task_dict, 'group')

		# Sending notification to all watchers about the updates of the task
		try:
			for each_user_id in list_of_recipients_ids:
				activ = "Contribution to " + group_obj.name +"."
				mail_content = u"\n The resource "+ node_obj.name +" is REJECTED by " \
							 + request.user.username + ". \n" \
							 + "Reason specified: "+ unicode(reject_reason_msg)
				user_obj = User.objects.get(id=int(each_user_id))
				set_notif_val(request, group_obj._id, mail_content, activ, user_obj)
		except Exception as e:
			print "\n Unable to send notifications ",e
		flag = 1
	return HttpResponse(flag)