def task_set_notify_val(request_user_id, group_id, msg, activ, to_user): ''' Attach notification mail to celery task ''' # sitename = Site.objects.all()[0] site = Site.objects.get(pk=1) site_domain = site.domain # print "=== site_domain: ", site_domain sitename = unicode(site.name.__str__()) request_user = User.objects.get(id=request_user_id) to_send_user = User.objects.get(id=to_user) try: group_obj = node_collection.one({'_id': ObjectId(group_id)}) # site = sitename.name.__str__() objurl = "http://test" render = render_to_string( "notification/label.html", { 'sender': request_user.username, 'activity': activ, 'conjunction': '-', 'object': group_obj, 'site': sitename, 'link': objurl } ) notification.create_notice_type(render, msg, "notification") notification.send([to_send_user], render, {"from_user": request_user}) return True except Exception as e: print "Error in sending notification- "+str(e) return False
def handle(self, *args, **options): Event = collection.Node.find({"_type":"GSystemType","name":{'$in':["Classroom Session","Exam"]}}) marks_enter = collection.Node.find({"member_of":{'$in':[ObjectId(Event[0]._id),ObjectId(Event[1]._id)]},"attribute_set.marks_entered":True}) Mis_admin = collection.Node.one({"_type":"Group","name":"MIS_admin"}) Mis_admin_name="" if Mis_admin: Mis_admin_list = Mis_admin.group_admin Mis_admin_list.append(Mis_admin.created_by) user_obj = User.objects.get(id=Mis_admin.created_by) Mis_admin_name = user_obj.username for i in marks_enter: to_user_list = [] event_status = collection.Node.one({"_type":"AttributeType","name":"event_status"}) create_gattribute(ObjectId(i._id),event_status,unicode('Incomplete')) node = collection.Node.one({"_id":{'$in':i.group_set}}) for j in node.group_admin: user_obj = User.objects.get(id = j) if user_obj not in to_user_list: to_user_list.append(user_obj) render_label = render_to_string( "notification/label.html", { "sender": Mis_admin_name, "activity": "Marks not entered", "conjunction": "-" }) notification.create_notice_type(render_label," Marks is not entered for Event" + i.name +"\n Please enter marks soon" , "notification") notification.send(to_user_list, render_label, {"from_user": Mis_admin_name})
def send_event_notif_to_all_grp_members(group_obj, app_set_id, event_node, user_list): group_id = group_obj._id to_user_list = [] event_organizer_str = "" event_coordinator_str = "" event_organized_by = [] event_attendees = [] event_coordinator = [] for i in event_node.relation_set: if unicode('event_organised_by') in i.keys(): event_organized_by = i['event_organised_by'] if unicode('has_attendees') in i.keys(): event_attendees = i['has_attendees'] if unicode('event_coordinator') in i.keys(): event_coordinator = i['event_coordinator'] try: event_url = "/"+str(group_id)+"/event/"+str(app_set_id) +"/"+str(event_node._id) site = Site.objects.get(pk=1) site = site.name.__str__() event_link = "http://" + site + event_url event_organized_by_cur = node_collection.find({"_id":{'$in':event_organized_by}}) event_coordinator_cur = node_collection.find({"_id":{'$in':event_coordinator}}) for i in event_coordinator_cur: event_coordinator_str = event_coordinator_str + i.name + " " for i in event_organized_by_cur: event_organizer_str = event_coordinator_str + i.name + " " render_label = render_to_string( "notification/label.html", { "sender": "metaStudio", "activity": "Event Created", "conjunction": "-" }) if user_list: for j in event_attendees: auth = node_collection.one({"_id":ObjectId(j)}) user_obj = User.objects.get(id=auth.created_by) if user_obj not in to_user_list: to_user_list.append(user_obj) else: for each_member in group_obj.author_set: user_obj = User.objects.get(id=each_member) if user_obj not in to_user_list: to_user_list.append(user_obj) if event_organized_by: msg_string = "\n Event is organized by " + str ( event_organizer_str ) else: msg_string = "" message_string = "Invitation for Event"+ " " + str(event_node.name) + msg_string + "\n Event will be co-ordinated by " +str (event_coordinator_str) + "\n- Please click [[" + event_link + "][here]] to view the details of the event" notification.create_notice_type(render_label, message_string, "notification") ##This is sent via email to all attendees in the group notification.send(to_user_list, render_label, {"from_user":"******"}) except Exception as mailerror: error_msg = "Unable to send notifications!!! ", str(mailerror) # print error_msg pass
def handle(self, *args, **options): Event = collection.Node.find({ "_type": "GSystemType", "name": { '$in': ["Classroom Session", "Exam"] } }) marks_enter = collection.Node.find({ "member_of": { '$in': [ObjectId(Event[0]._id), ObjectId(Event[1]._id)] }, "attribute_set.marks_entered": True }) Mis_admin = collection.Node.one({ "_type": "Group", "name": "MIS_admin" }) Mis_admin_name = "" if Mis_admin: Mis_admin_list = Mis_admin.group_admin Mis_admin_list.append(Mis_admin.created_by) user_obj = User.objects.get(id=Mis_admin.created_by) Mis_admin_name = user_obj.username for i in marks_enter: to_user_list = [] event_status = collection.Node.one({ "_type": "AttributeType", "name": "event_status" }) create_gattribute(ObjectId(i._id), event_status, unicode('Incomplete')) node = collection.Node.one({"_id": {'$in': i.group_set}}) for j in node.group_admin: user_obj = User.objects.get(id=j) if user_obj not in to_user_list: to_user_list.append(user_obj) render_label = render_to_string( "notification/label.html", { "sender": Mis_admin_name, "activity": "Marks not entered", "conjunction": "-" }) notification.create_notice_type( render_label, " Marks is not entered for Event" + i.name + "\n Please enter marks soon", "notification") notification.send(to_user_list, render_label, {"from_user": Mis_admin_name})
def set_notif_val(request, group_id, msg, activ, bx): try: group_obj = col_Group.Group.one({"_id": ObjectId(group_id)}) site = sitename.name.__str__() objurl = "http://test" render = render_to_string( "notification/label.html", { "sender": request.user.username, "activity": activ, "conjunction": "-", "object": group_obj, "site": site, "link": objurl, }, ) notification.create_notice_type(render, msg, "notification") notification.send([bx], render, {"from_user": request.user}) return True except Exception as e: print "Error in sending notification-", e return False
def event_create_edit(request, group_id, app_set_id=None, app_set_instance_id=None): """ View for handling Event and it's sub-types create-edit-view """ auth = None try: group_id = ObjectId(group_id) #group_id is a valid ObjectId except: group_name, group_id = get_group_name_id( group_id ) #instead of group_id the name of the object is passed via URL to the function app_set = "" title = "" #Stores the name of the type of event such as Meeting, Inauguration, etc. session_of = "" module = "" Add = "" announced_course = "" batch = "" event_gst = None event_gs = None property_order_list = [] template_prefix = "mis" group_inverse_rel_id = [] Group_type = node_collection.one( {'_id': ObjectId(group_id)} ) #instance of the group object in which the event is created e.g. "home" is a group for i in Group_type.relation_set: if unicode("group_of") in i.keys(): group_inverse_rel_id = i['group_of'] Group_name = node_collection.one({ '_type': 'GSystem', '_id': { '$in': group_inverse_rel_id } }) Eventtype = 'Eventtype' if Group_name: if (any(unicode('has_group') in d for d in Group_name.relation_set)) == True: Eventtype = 'CollegeEvents' else: Eventtype = 'Eventtype' Glisttype = node_collection.find({"_type": "GSystemType", "name": "GList"}) Event_Types = node_collection.one( { "member_of": ObjectId(Glisttype[0]["_id"]), "name": Eventtype }, {'collection_set': 1} ) #Stores the object ids of all the types of events e.g. Meeting, Inauguration, ... app_collection_set = [ ] #stores the id, name and type_of for all event types (Meeting, Inauguration, etc.) as a list if Event_Types: for eachset in Event_Types.collection_set: app_collection_set.append( node_collection.one({"_id": eachset}, { '_id': 1, 'name': 1, 'type_of': 1 })) iteration = request.POST.get("iteration", "") if iteration == "": iteration = 1 for i in range(int(iteration)): if app_set_id: event_gst = node_collection.one( { '_type': "GSystemType", '_id': ObjectId(app_set_id) }, { 'name': 1, 'type_of': 1 } ) #GSystemType Object for the event corresponding to app_set_id e.g. Meeting title = event_gst.name event_gs = node_collection.collection.GSystem( ) #create a new GSystem Object for the Event event_gs.member_of.append( event_gst._id) #event_gs is a member_of event_gst if app_set_instance_id: #app_set_instance_id is the objectid of the event object which is already created event_gs = node_collection.one({ '_type': "GSystem", '_id': ObjectId(app_set_instance_id) }) property_order_list = get_property_order_with_value( event_gs ) #.property_order #stores the properties defining a particular event in a list e.g. name, start_time, attendees, etc.. if request.method == "POST": print "#####################" print request.POST.getlist(u'event_coordinator') print "#####################" # [A] Save event-node's base-field(s) # print "\n Going before....", type(event_gs), "\n event_gs.keys(): ", event_gs.keys() # get_node_common_fields(request, event_gs, group_id, event_gst) # print "\n Going after....", type(event_gs), "\n event_gs.keys(): ", event_gs.keys() # print "\n event_gs: \n", event_gs.keys() # for k, v in event_gs.items(): # print "\n ", k, " -- ", v is_changed = get_node_common_fields(request, event_gs, group_id, event_gst) if is_changed: # Remove this when publish button is setup on interface event_gs.status = u"PUBLISHED" if (request.POST.get("name", "")) == "": if i > 0: field_value = request.POST.get('start_time' + "_" + str(i), '') else: field_value = request.POST.get('start_time', '') # print "----------------Field Value-----------" # print field_value if event_gst.name == "Exam": name = "Exam" + "--" + slugify( request.POST.get("batch_name", "")) + "--" + field_value else: name = "Class" + "--" + slugify( request.POST.get("course_name", "")) + "--" + field_value # print "-----------------Name------------------" # print name event_gs.name = name event_gs.save(is_changed=is_changed, groupid=group_id) # print "\n Event: ", event_gs._id, " -- ", event_gs.name, "\n" # [B] Store AT and/or RT field(s) of given event-node (i.e., event_gs) for tab_details in property_order_list: for field_set in tab_details[1]: print "##########################" print "field_set:" print field_set print "##########################s" # field_set pattern -- {[field_set[0]:node_structure, field_set[1]:field_base/AT/RT_instance{'_id':, 'name':, 'altnames':}, field_set[2]:node_value]} # field_set pattern -- {'_id', 'data_type', 'name', 'altnames', 'value'} # print " ", field_set["name"] # * Fetch only Attribute field(s) / Relation field(s) if field_set.has_key( '_id' ): #Implies field_set is not a basefield but is an AT/RT field_instance = node_collection.one( {'_id': field_set['_id']} ) #field_instance is an instance for AT or RT e.g. start_time field_instance_type = type(field_instance) if field_instance_type in [ AttributeType, RelationType ]: if field_instance["name"] == "attendees": continue field_data_type = field_set[ 'data_type'] #data type of AT/RT e.g. datetime.datetime for start_time # Fetch field's value depending upon AT/RT and Parse fetched-value depending upon that field's data-type if field_instance_type == AttributeType: if "File" in field_instance["validators"]: # Special case: AttributeTypes that require file instance as it's value in which case file document's ObjectId is used if field_instance["name"] in request.FILES: field_value = request.FILES[ field_instance["name"]] else: field_value = "" # Below 0th index is used because that function returns tuple(ObjectId, bool-value) if field_value != '' and field_value != u'': file_name = event_gs.name + " -- " + field_instance[ "altnames"] content_org = "" tags = "" field_value = save_file( field_value, file_name, request.user.id, group_id, content_org, tags, access_policy="PRIVATE", count=0, first_object="", oid=True)[0] if "date_month_day_year" in field_instance[ "validators"]: if i > 0: field_value = request.POST.get( field_instance["name"] + "_" + str(i)) else: field_value = request.POST[ field_instance["name"]] else: # Other AttributeTypes field_value = request.POST[ field_instance["name"]] # field_instance_type = "GAttribute" # print "\n Parsing data for: ", field_instance["name"] if field_instance["name"] in [ "12_passing_year", "degree_passing_year" ]: #, "registration_year"]: field_value = parse_template_data( field_data_type, field_value, date_format_string="%Y") elif field_instance["name"] in [ "dob", "registration_date" ]: field_value = parse_template_data( field_data_type, field_value, date_format_string="%d/%m/%Y") else: field_value = parse_template_data( field_data_type, field_value, date_format_string="%d/%m/%Y %H:%M") if field_value: event_gs_triple_instance = create_gattribute( event_gs._id, node_collection.collection. AttributeType(field_instance), field_value) # print "--------------------------------------------------------------------------------------------------" # print "\n event_gs_triple_instance: ", event_gs_triple_instance._id, " -- ", event_gs_triple_instance.name else: #field_instance_type == RelationType field_value_list = request.POST.getlist( field_instance["name"]) # print "#######################" # print field_value_list # print "#######################" # field_instance_type = "GRelation" #code for creation of relation Session of for i, field_value in enumerate( field_value_list): print "#######" print field_value print "#######" field_value = parse_template_data( ObjectId, field_value, field_instance=field_instance, date_format_string="%d/%m/%Y %H:%M") field_value_list[i] = field_value if field_value_list: event_gs_triple_instance = create_grelation( event_gs._id, node_collection.collection. RelationType(field_instance), field_value_list) # if isinstance(event_gs_triple_instance, list): # print "\n" # for each in event_gs_triple_instance: # print " event_gs_triple_instance: ", each._id, " -- ", each.name # print "\n" # else: # print "\n event_gs_triple_instance: ", event_gs_triple_instance._id, " -- ", event_gs_triple_instance.name #End of for loop on property_order_list # return HttpResponseRedirect(reverse('page_details', kwargs={'group_id': group_id, 'app_id': page_node._id })) '''return HttpResponseRedirect(reverse(app_name.lower()+":"+template_prefix+'_app_detail', kwargs={'group_id': group_id, "app_id":app_id, "app_set_id":app_set_id}))''' if event_gst.name == u'Classroom Session' or event_gst.name == u'Exam': if i == ((int(iteration)) - 1): #code to send mail to every one return HttpResponseRedirect( reverse('event_app_instance_detail', kwargs={ 'group_id': group_id, "app_set_id": app_set_id, "app_set_instance_id": event_gs._id })) else: to_user_list = [] event_organizer_str = "" event_coordinator_str = "" event_organized_by = [] event_attendees = [] event_coordinator = [] event_node = node_collection.one( {'_id': ObjectId(event_gs._id)}) for i in event_node.relation_set: if unicode('event_organised_by') in i.keys(): event_organized_by = i['event_organised_by'] if unicode('has_attendees') in i.keys(): event_attendees = i['has_attendees'] if unicode('event_coordinator') in i.keys(): event_coordinator = i['event_coordinator'] event_url = "/" + str(group_id) + "/event/" + str( app_set_id) + "/" + str(event_node._id) site = Site.objects.get(pk=1) site = site.name.__str__() event_link = "http://" + site + event_url event_organized_by_cur = node_collection.find( {"_id": { '$in': event_organized_by }}) event_coordinator_cur = node_collection.find( {"_id": { '$in': event_coordinator }}) for i in event_coordinator_cur: event_coordinator_str = event_coordinator_str + i.name + " " for i in event_organized_by_cur: event_organizer_str = event_coordinator_str + i.name + " " for j in event_attendees: auth = node_collection.one({"_id": ObjectId(j)}) user_obj = User.objects.get(id=auth.created_by) if user_obj not in to_user_list: to_user_list.append(user_obj) render_label = render_to_string( "notification/label.html", { "sender": "metaStudio", "activity": "Event Created", "conjunction": "-" }) if event_organized_by: msg_string = "\n Event is organized by " + str( event_organizer_str) else: msg_string = "" print "--------------------------" print event_node.name print event_node._id print "--------------------------" SALT = '8cd8ef52e8e101574e400365b55e11a6' URL = 'http://test-install.blindsidenetworks.com/bigbluebutton/' createMeeting(event_node.name, event_node._id, 'welcome', 'mPW', 'aPW', SALT, URL, 'www.google.com') url = joinURL(event_node._id, 'user', 'mPW', SALT, URL) event_node.url = unicode(url) event_node.save() # url_create = createMeetingURL(event_node.name, event_node._id, 'aPW', 'mPW', 'welcome', 'www.google.com', SALT , URL); print "##########" print event_node.url print "##########" # bbb_start(event_node.name, event_node._id) message_string = "Invitation for Event" + " " + str( event_node.name ) + msg_string + "\n Event will be co-ordinated by " + str( event_coordinator_str ) + "\n- Please click [[" + event_link + "][here]] to view the details of the event" message_string = "Hello World" notification.create_notice_type( render_label, message_string, "notification" ) ##This is sent via email to all attendees in the group notification.send(to_user_list, render_label, {"from_user": "******"}) return HttpResponseRedirect( reverse('event_app_instance_detail', kwargs={ 'group_id': group_id, "app_set_id": app_set_id, "app_set_instance_id": event_node._id })) event_attendees = request.POST.getlist('has_attendees', '') event_gs.get_neighbourhood(event_gs.member_of) course = [] val = False for i in event_gs.relation_set: if unicode('event_has_batch') in i.keys(): batch = node_collection.one({ '_type': "GSystem", '_id': ObjectId(i['event_has_batch'][0]) }) batch_relation = node_collection.one( { '_type': "GSystem", '_id': ObjectId(batch._id) }, {'relation_set': 1}) for i in batch_relation['relation_set']: if unicode('has_course') in i.keys(): announced_course = node_collection.one({ "_type": "GSystem", '_id': ObjectId(i['has_course'][0]) }) for i in announced_course.relation_set: if unicode('announced_for') in i.keys(): course = node_collection.one({ "_type": "GSystem", '_id': ObjectId(i['announced_for'][0]) }) if unicode('session_of') in i.keys(): session_of = node_collection.one({ '_type': "GSystem", '_id': ObjectId(i['session_of'][0]) }) module = node_collection.one({ '_type': "GSystem", '_id': { '$in': session_of.prior_node } }) event_gs.event_coordinator Mis_admin = node_collection.one({"_type": "Group", "name": "MIS_admin"}) if Mis_admin: Mis_admin_list = Mis_admin.group_admin Mis_admin_list.append(Mis_admin.created_by) if request.user.id in Mis_admin_list: Add = "Allow" else: Add = "Stop" else: Add = "Stop" if event_gst.name == u'Classroom Session' or event_gst.name == u'Exam': template = "ndf/Nussd_event_Schedule.html" else: template = "ndf/event_create_edit.html" # default_template = "ndf/"+template_prefix+"_create_edit.html" context_variables = { 'group_id': group_id, 'groupid': group_id, 'app_collection_set': app_collection_set, 'app_set_id': app_set_id, 'title': title, 'property_order_list': property_order_list, 'Add': Add } if app_set_instance_id: event_detail = {} events = {} if event_gs.event_coordinator: event_detail["cordinatorname"] = str( event_gs.event_coordinator[0].name) event_detail["cordinatorid"] = str( event_gs.event_coordinator[0]._id) events["cordinator"] = event_detail if announced_course: event_detail["course"] = str(announced_course.name) event_detail["course_id"] = str(announced_course._id) events["course"] = event_detail event_detail = {} if batch: event_detail["batchname"] = str(batch.name) event_detail["batchid"] = str(batch._id) events["batch"] = event_detail event_detail = {} if session_of: event_detail["sessionname"] = str(session_of.name) event_detail["sessionid"] = str(session_of._id) for i in session_of.attribute_set: if unicode('course_structure_minutes') in i.keys(): event_detail["sessionminutes"] = str( i['course_structure_minutes']) events["session"] = event_detail event_detail = {} if module: event_detail["Modulename"] = str(module.name) event_detail["Moduleid"] = str(module._id) events["Module"] = event_detail context_variables['node'] = event_gs context_variables['edit_details'] = events # print "\n template-list: ", [template, default_template] # template = "ndf/fgh.html" # default_template = "ndf/dsfjhk.html" # return render_to_response([template, default_template], return render_to_response(template, context_variables, context_instance=RequestContext(request))
def handle(self, *args, **options): collection = get_database()[Node.collection_name] Event = collection.Node.find({ "_type": "GSystemType", "name": { '$in': ["Classroom Session", "Exam"] } }) yesterday = date.today() - timedelta(1) day_before_yesterday = date.today() - timedelta(2) date1 = datetime.date.today() ti = time(0, 0) Today = datetime.datetime.combine(date1, ti) yesterday = datetime.datetime.combine(yesterday, ti) day_before_yesterday = datetime.datetime.combine( day_before_yesterday, ti) no_of_days = 0 #get the Mis Admin Mis_admin = collection.Node.one({ "_type": "Group", "name": "MIS_admin" }) Mis_admin_name = "" if Mis_admin: Mis_admin_list = Mis_admin.group_admin Mis_admin_list.append(Mis_admin.created_by) user_obj = User.objects.get(id=Mis_admin.created_by) Mis_admin_name = user_obj.username Attendance_Event = collection.Node.find({ "member_of": { '$in': [ObjectId(Event[0]._id), ObjectId(Event[1]._id)] }, "attribute_set.start_time": { '$gte': day_before_yesterday, '$lt': Today } }) rescheduled_Attendance_events = collection.Node.find({ "member_of": { '$in': [ObjectId(Event[0]._id), ObjectId(Event[1]._id)] }, "attribute_set.reschedule_attendance.reschedule_till": { '$gt': yesterday } }) rescheduled_events = collection.Node.find({ "member_of": { '$in': [ObjectId(Event[0]._id), ObjectId(Event[1]._id)] }, "attribute_set.event_edit_reschedule.reschedule_till": { '$gt': yesterday } }) Attendance_marked_event = collection.Node.find({ "member_of": { '$in': [ObjectId(Event[0]._id), ObjectId(Event[1]._id)] }, "relation_set.has_attended": { "$exists": False }, "attribute_set.start_time": { '$gte': yesterday, 'lt': Today } }) reschedule_attendance = collection.Node.one({ "_type": "AttributeType", "name": "reschedule_attendance" }) reschedule_event = collection.Node.one({ "_type": "AttributeType", "name": "event_edit_reschedule" }) reschedule_dates = {} for i in Attendance_Event: for j in i.attribute_set: if unicode('reschedule_attendance') in j.keys(): reschedule_dates = j['reschedule_attendance'] reschedule_dates["reschedule_allow"] = False create_gattribute(ObjectId(i._id), reschedule_attendance, reschedule_dates) reschedule_dates = {} for i in rescheduled_events: for j in i.attribute_set: if unicode('event_edit_reschedule') in j.keys(): reschedule_dates = j['event_edit_reschedule'] reschedule_dates['reschedule_allow'] = False create_gattribute(ObjectId(i._id), reschedule_event, reschedule_dates) reschedule_dates = {} for i in rescheduled_Attendance_events: for j in i.attribute_set: if unicode('reschedule_attendance') in j.keys(): reschedule_dates = j['reschedule_attendance'] reschedule_dates["reschedule_allow"] = False create_gattribute(ObjectId(i._id), reschedule_attendance, reschedule_dates) for i in Attendance_marked_event: event_status = collection.Node.one({ "_type": "AttributeType", "name": "event_status" }) create_gattribute(ObjectId(i._id), event_status, unicode('Incomplete')) for j in i.attribute_set: if unicode("start_time") in j.keys(): if (j["start_time"] >= day_before_yesterday and j["start_time"] < yesterday): no_of_days = 2 if (j["start_time"] >= yesterday and j["start_time"] < Today): no_of_days = 1 to_user_list = [] #node is the node of the college Group node = collection.Node.one({ "_type": "Group", "_id": { '$in': i.group_set } }) for j in node.group_admin: user_obj = User.objects.get(id=j) if user_obj not in to_user_list: to_user_list.append(user_obj) render_label = render_to_string( "notification/label.html", { "sender": Mis_admin_name, "activity": "Attendance not marked", "conjunction": "-" }) notification.create_notice_type( render_label, "Attendance is not marked for " + i.name + " Event \n Attendance would be blocked after" + str(no_of_days) + "days", "notification") notification.send(to_user_list, render_label, {"from_user": Mis_admin_name})
def discussion_reply(request, group_id, node_id): try: group_id = ObjectId(group_id) except: group_name, group_id = get_group_name_id(group_id) try: group_object = node_collection.one({'_id': ObjectId(group_id)}) prior_node = request.POST.get("prior_node_id", "") content_org = request.POST.get("reply_text_content", "") # reply content node = node_collection.one({"_id": ObjectId(node_id)}) gs_type_node_id = None if u'Twist' not in node.member_of_names_list: grel_dict = get_relation_value(node_id,'thread_of', True) node = grel_dict['grel_node'] if node.prior_node: gs_type_node_id = node.prior_node[0] # if node and node.relation_set: # for each_rel in node.relation_set: # if each_rel and "thread_of" in each_rel: # gs_type_node_id = each_rel['thread_of'][0] # break # grel_dict = get_relation_value(node_id,'thread_of') # is_cursor = grel_dict.get("cursor",False) # if not is_cursor: # gs_type_node_id = grel_dict.get("grel_node") # # grel_id = grel_dict.get("grel_id") # print "\n\n node.name === ", node.member_of_names_list, node._id, node.name # process and save node if it reply has content if content_org: user_id = int(request.user.id) user_name = unicode(request.user.username) # auth = node_collection.one({'_type': 'Author', 'name': user_name }) # creating empty GST and saving it reply_obj = node_collection.collection.GSystem() reply_obj.name = unicode("Reply of:" + str(prior_node)) reply_obj.status = u"PUBLISHED" reply_obj.created_by = user_id reply_obj.modified_by = user_id reply_obj.contributors.append(user_id) reply_obj.member_of.append(ObjectId(reply_st._id)) reply_obj.prior_node.append(ObjectId(prior_node)) reply_obj.group_set.append(ObjectId(group_id)) reply_obj.content_org = unicode(content_org) filename = slugify(unicode("Reply of:" + str(prior_node))) + "-" + user_name + "-" # reply_obj.content = org2html(content_org, file_prefix=filename) reply_obj.content = content_org if gs_type_node_id: reply_obj.origin.append({'prior_node_id_of_thread': ObjectId(gs_type_node_id)}) if node_id: reply_obj.origin.append({'thread_id': ObjectId(node_id)}) # ============================== # try: upload_files_count=int(request.POST.get("upload_cnt",0)) # print "upfiles=",upload_files_count lst=[] lstobj_collection=[] usrid = int(request.user.id) if upload_files_count > 0: # print "uploaded items",request.FILES.items() try: thread_obj = node_collection.one({'_id': ObjectId(prior_node)}) # print "thread_obj : ", thread_obj if thread_obj.access_policy: access_policy = thread_obj.access_policy else: access_policy = u'PUBLIC' except: access_policy = u'PUBLIC' for key,value in request.FILES.items(): fname=unicode(value.__dict__['_name']) # print "key=",key,"value=",value,"fname=",fname fileobj,fs=save_file(value,fname,usrid,group_id, "", "", username=unicode(request.user.username), access_policy=access_policy, count=0, first_object="", oid=True) if type(fileobj) == list: obid = str(list(fileobj)[1]) else: obid=str(fileobj) try: file_obj=node_collection.find_one({'_id': ObjectId(obid)}) lstobj_collection.append(file_obj._id) except: pass if "CourseEventGroup" not in group_object.member_of_names_list: if group_object.edit_policy == 'EDITABLE_MODERATED': t = create_moderator_task(request, file_obj.group_set[0], file_obj._id,on_upload=True) # print "::: lstobj_collection: ", lstobj_collection # except: # lstobj_collection = [] # ============================== reply_obj.collection_set = lstobj_collection # print "=== lstobj_collection: ", lstobj_collection # saving the reply obj reply_obj.save() #Update Counter Collection # thread_obj = node_collection.one({'_id':ObjectId(node_id)}) if gs_type_node_id: gs_type_node = node_collection.one({'_id':gs_type_node_id}) 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.now()) # removing redundancy of user ids: active_user_ids_list = dict.fromkeys(active_user_ids_list).keys() Counter.add_comment_pt(resource_obj_or_id=gs_type_node, current_group_id=group_id, active_user_id_or_list=active_user_ids_list) # if gs_type_node.if_file.mime_type : # file_creator_id = gs_type_node.created_by # if file_creator_id != request.user.id : # counter_obj = Counter.get_counter_obj(request.user.id, ObjectId(group_id)) # # counter_obj.no_comments_on_others_files += 1 # counter_obj['file']['commented_on_others_res'] += 1 # # counter_obj.no_comments_by_user += 1 # counter_obj['total_comments_by_user'] += 1 # # counter_obj.course_score += GSTUDIO_COMMENT_POINTS # counter_obj['group_points'] += GSTUDIO_COMMENT_POINTS # counter_obj_creator = Counter.get_counter_obj(file_creator_id, ObjectId(group_id)) # # counter_obj_creator.no_comments_received_on_files += 1 # counter_obj_creator['file']['comments_gained'] += 1 # # counter_obj_creator.no_comments_for_user += 1 # if str(counter_obj.user_id) in counter_obj_creator.file['comments_by_others_on_res'].keys(): # # counter_obj_creator.comments_by_others_on_files[str(counter_obj.user_id)] += 1 # counter_obj_creator['file']['comments_by_others_on_res'][str(counter_obj.user_id)] += 1 # else: # # counter_obj_creator.comments_by_others_on_files.update({str(counter_obj.user_id):1}) # counter_obj_creator.file['comments_by_others_on_res'].update({str(counter_obj.user_id):1}) # counter_obj.last_update = datetime.now() # counter_obj_creator.last_update = datetime.now() # counter_obj.save() # counter_obj_creator.save() # else : # note_creator_id = gs_type_node.created_by # if note_creator_id != request.user.id : # counter_obj = Counter.get_counter_obj(request.user.id, ObjectId(group_id)) # # counter_obj.no_comments_by_user += 1 # counter_obj['total_comments_by_user'] += 1 # # counter_obj.no_comments_on_others_notes += 1 # counter_obj['page']['blog']['commented_on_others_res'] += 1 # counter_obj['group_points'] += GSTUDIO_COMMENT_POINTS # counter_obj_creator = Counter.get_counter_obj(note_creator_id, ObjectId(group_id)) # # counter_obj_creator.no_comments_for_user += 1 # # counter_obj_creator.no_comments_received_on_notes += 1 # counter_obj_creator['page']['blog']['comments_gained'] += 1 # # if str(counter_obj.user_id) in counter_obj_creator.comments_by_others_on_notes.keys(): # if str(counter_obj.user_id) in counter_obj_creator.page.blog['comments_by_others_on_res'].keys(): # # counter_obj_creator.comments_by_others_on_notes[str(counter_obj.user_id)] += 1 # counter_obj_creator['page']['blog']['comments_by_others_on_res'][str(counter_obj.user_id)] += 1 # else: # counter_obj_creator.page.blog['comments_by_others_on_res'].update({str(counter_obj.user_id):1}) # counter_obj.last_update = datetime.now() # counter_obj_creator.last_update = datetime.now() # counter_obj.save() # counter_obj_creator.save() formated_time = reply_obj.created_at.strftime("%B %d, %Y, %I:%M %p") files = [] for each_coll_item in reply_obj.collection_set: temp_list = [] temp = node_collection.one({'_id': ObjectId(each_coll_item)}, {'mime_type': 1, 'name': 1}) temp_list.append(str(temp['_id'])) temp_list.append(str(temp['mime_type'])) temp_list.append(str(temp['name'])) files.append(temp_list) # print files user_names = reply_obj.user_details_dict["contributors"] is_grp_admin = False if request.user.id in group_object.group_admin: is_grp_admin = True # ["status_info", "reply_id", "prior_node", "html_content", "org_content", "user_id", "user_name", "created_at" ] reply = json.dumps( [ "reply_saved", str(reply_obj._id), str(reply_obj.prior_node[0]), reply_obj.content, reply_obj.content_org, user_id, user_names, formated_time, files,is_grp_admin], cls=DjangoJSONEncoder ) # print "===========", reply # ---------- mail/notification sending ------- try: node_creator_user_obj = User.objects.get(id=node.created_by) node_creator_user_name = node_creator_user_obj.username if int(request.user.id) not in node.author_set: node.author_set.append(int(request.user.id)) node.save() site = Site.objects.get(pk=1) site = site.name.__str__() from_user = user_name to_user_list = [node_creator_user_obj] msg = "\n\nDear " + node_creator_user_name + ",\n\n" + \ "A reply has been added in discussion under the " + \ node.member_of_names_list[0] + " named: '" + \ node.name + "' by '" + user_name + "'." activity = "Discussion Reply" render_label = render_to_string( "notification/label.html", { # "sender": from_user, "activity": activity, "conjunction": "-", "link": "url_link" } ) notification.create_notice_type(render_label, msg, "notification") notification.send(to_user_list, render_label, {"from_user": from_user}) except Exception as notification_err: print "\n Unable to send notification", notification_err # ---------- END of mail/notification sending --------- return HttpResponse( reply ) else: # no reply content return HttpResponse(json.dumps(["no_content"])) except Exception as e: error_message = "\n DiscussionReplyCreateError: " + str(e) + "\n" raise Exception(error_message) return HttpResponse(json.dumps(["Server Error"]))
def discussion_reply(request, group_id, node_id): try: group_id = ObjectId(group_id) except: group_name, group_id = get_group_name_id(group_id) try: group_object = node_collection.one({'_id': ObjectId(group_id)}) prior_node = request.POST.get("prior_node_id", "") content_org = request.POST.get("reply_text_content", "") # reply content node = node_collection.one({"_id": ObjectId(node_id)}) gs_type_node_id = None if u'Twist' not in node.member_of_names_list: # grel_dict = get_relation_value(node_id,'thread_of', True) grel_dict = get_relation_value(node._id,'has_thread', True) node = grel_dict['grel_node'] if node.prior_node: gs_type_node_id = node.prior_node[0] else: try: has_thread_at = node_collection.one({'_type': 'RelationType', 'name': 'has_thread'}) has_thread_grel = triple_collection.find_one({'_type': 'GRelation', 'relation_type': has_thread_at._id, 'right_subject': node._id, 'status': 'PUBLISHED'}) gs_type_node_id = has_thread_grel.subject except Exception as e: print "\n Node asssociated with Thread node NOT found.", e pass # process and save node if it reply has content if content_org: user_id = int(request.user.id) user_name = unicode(request.user.username) # auth = node_collection.one({'_type': 'Author', 'name': user_name }) # creating empty GST and saving it reply_obj = node_collection.collection.GSystem() reply_obj.name = unicode("Reply of:" + str(prior_node)) reply_obj.status = u"PUBLISHED" reply_obj.created_by = user_id reply_obj.modified_by = user_id reply_obj.contributors.append(user_id) reply_obj.member_of.append(ObjectId(reply_st._id)) reply_obj.prior_node.append(ObjectId(prior_node)) reply_obj.group_set.append(ObjectId(group_id)) reply_obj.content_org = unicode(content_org) filename = slugify(unicode("Reply of:" + str(prior_node))) + "-" + user_name + "-" # reply_obj.content = org2html(content_org, file_prefix=filename) reply_obj.content = content_org if gs_type_node_id: reply_obj.origin.append({'prior_node_id_of_thread': ObjectId(gs_type_node_id)}) if node_id: reply_obj.origin.append({'thread_id': ObjectId(node_id)}) # ============================== # try: upload_files_count=int(request.POST.get("upload_cnt",0)) # print "upfiles=",upload_files_count lst=[] lstobj_collection=[] usrid = int(request.user.id) if upload_files_count > 0: # print "uploaded items",request.FILES.items() try: thread_obj = node_collection.one({'_id': ObjectId(prior_node)}) # print "thread_obj : ", thread_obj if thread_obj.access_policy: access_policy = thread_obj.access_policy else: access_policy = u'PUBLIC' except: access_policy = u'PUBLIC' for key,value in request.FILES.items(): fname=unicode(value.__dict__['_name']) # print "key=",key,"value=",value,"fname=",fname fileobj,fs=save_file(value,fname,usrid,group_id, "", "", username=unicode(request.user.username), access_policy=access_policy, count=0, first_object="", oid=True) if type(fileobj) == list: obid = str(list(fileobj)[1]) else: obid=str(fileobj) try: file_obj=node_collection.find_one({'_id': ObjectId(obid)}) lstobj_collection.append(file_obj._id) except: pass if "CourseEventGroup" not in group_object.member_of_names_list: if group_object.edit_policy == 'EDITABLE_MODERATED': t = create_moderator_task(request, file_obj.group_set[0], file_obj._id,on_upload=True) # print "::: lstobj_collection: ", lstobj_collection # except: # lstobj_collection = [] # ============================== reply_obj.collection_set = lstobj_collection # print "=== lstobj_collection: ", lstobj_collection # saving the reply obj reply_obj.save() #Update Counter Collection # thread_obj = node_collection.one({'_id':ObjectId(node_id)}) if gs_type_node_id: gs_type_node = node_collection.one({'_id':gs_type_node_id}) 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.now()) # removing redundancy of user ids: active_user_ids_list = dict.fromkeys(active_user_ids_list).keys() Counter.add_comment_pt(resource_obj_or_id=gs_type_node, current_group_id=group_id, active_user_id_or_list=active_user_ids_list) # if gs_type_node.if_file.mime_type : # file_creator_id = gs_type_node.created_by # if file_creator_id != request.user.id : # counter_obj = Counter.get_counter_obj(request.user.id, ObjectId(group_id)) # # counter_obj.no_comments_on_others_files += 1 # counter_obj['file']['commented_on_others_res'] += 1 # # counter_obj.no_comments_by_user += 1 # counter_obj['total_comments_by_user'] += 1 # # counter_obj.course_score += GSTUDIO_COMMENT_POINTS # counter_obj['group_points'] += GSTUDIO_COMMENT_POINTS # counter_obj_creator = Counter.get_counter_obj(file_creator_id, ObjectId(group_id)) # # counter_obj_creator.no_comments_received_on_files += 1 # counter_obj_creator['file']['comments_gained'] += 1 # # counter_obj_creator.no_comments_for_user += 1 # if str(counter_obj.user_id) in counter_obj_creator.file['comments_by_others_on_res'].keys(): # # counter_obj_creator.comments_by_others_on_files[str(counter_obj.user_id)] += 1 # counter_obj_creator['file']['comments_by_others_on_res'][str(counter_obj.user_id)] += 1 # else: # # counter_obj_creator.comments_by_others_on_files.update({str(counter_obj.user_id):1}) # counter_obj_creator.file['comments_by_others_on_res'].update({str(counter_obj.user_id):1}) # counter_obj.last_update = datetime.now() # counter_obj_creator.last_update = datetime.now() # counter_obj.save() # counter_obj_creator.save() # else : # note_creator_id = gs_type_node.created_by # if note_creator_id != request.user.id : # counter_obj = Counter.get_counter_obj(request.user.id, ObjectId(group_id)) # # counter_obj.no_comments_by_user += 1 # counter_obj['total_comments_by_user'] += 1 # # counter_obj.no_comments_on_others_notes += 1 # counter_obj['page']['blog']['commented_on_others_res'] += 1 # counter_obj['group_points'] += GSTUDIO_COMMENT_POINTS # counter_obj_creator = Counter.get_counter_obj(note_creator_id, ObjectId(group_id)) # # counter_obj_creator.no_comments_for_user += 1 # # counter_obj_creator.no_comments_received_on_notes += 1 # counter_obj_creator['page']['blog']['comments_gained'] += 1 # # if str(counter_obj.user_id) in counter_obj_creator.comments_by_others_on_notes.keys(): # if str(counter_obj.user_id) in counter_obj_creator.page.blog['comments_by_others_on_res'].keys(): # # counter_obj_creator.comments_by_others_on_notes[str(counter_obj.user_id)] += 1 # counter_obj_creator['page']['blog']['comments_by_others_on_res'][str(counter_obj.user_id)] += 1 # else: # counter_obj_creator.page.blog['comments_by_others_on_res'].update({str(counter_obj.user_id):1}) # counter_obj.last_update = datetime.now() # counter_obj_creator.last_update = datetime.now() # counter_obj.save() # counter_obj_creator.save() formated_time = reply_obj.created_at.strftime("%B %d, %Y, %I:%M %p") files = [] for each_coll_item in reply_obj.collection_set: temp_list = [] temp = node_collection.one({'_id': ObjectId(each_coll_item)}, {'mime_type': 1, 'name': 1}) temp_list.append(str(temp['_id'])) temp_list.append(str(temp['mime_type'])) temp_list.append(str(temp['name'])) files.append(temp_list) # print files user_names = reply_obj.user_details_dict["contributors"] is_grp_admin = False if request.user.id in group_object.group_admin: is_grp_admin = True # ["status_info", "reply_id", "prior_node", "html_content", "org_content", "user_id", "user_name", "created_at" ] reply = json.dumps( [ "reply_saved", str(reply_obj._id), str(reply_obj.prior_node[0]), reply_obj.content, reply_obj.content_org, user_id, user_names, formated_time, files,is_grp_admin], cls=DjangoJSONEncoder ) # print "===========", reply # ---------- mail/notification sending ------- try: node_creator_user_obj = User.objects.get(id=node.created_by) node_creator_user_name = node_creator_user_obj.username if int(request.user.id) not in node.author_set: node.author_set.append(int(request.user.id)) node.save() site = Site.objects.get(pk=1) site = site.name.__str__() from_user = user_name to_user_list = [node_creator_user_obj] msg = "\n\nDear " + node_creator_user_name + ",\n\n" + \ "A reply has been added in discussion under the " + \ node.member_of_names_list[0] + " named: '" + \ node.name + "' by '" + user_name + "'." activity = "Discussion Reply" render_label = render_to_string( "notification/label.html", { # "sender": from_user, "activity": activity, "conjunction": "-", "link": "url_link" } ) notification.create_notice_type(render_label, msg, "notification") notification.send(to_user_list, render_label, {"from_user": from_user}) except Exception as notification_err: print "\n Unable to send notification", notification_err # ---------- END of mail/notification sending --------- return HttpResponse( reply ) else: # no reply content return HttpResponse(json.dumps(["no_content"])) except Exception as e: error_message = "\n DiscussionReplyCreateError: " + str(e) + "\n" raise Exception(error_message) return HttpResponse(json.dumps(["Server Error"]))
def event_create_edit(request, group_id, app_set_id=None, app_set_instance_id=None): """ View for handling Event and it's sub-types create-edit-view """ auth = None # if ObjectId.is_valid(group_id) is False : # group_ins = node_collection.one({'_type': "Group","name": group_id}) # auth = node_collection.one({'_type': 'Author', 'name': unicode(request.user.username) }) # if group_ins: # group_id = str(group_ins._id) # else : # auth = node_collection.one({'_type': 'Author', 'name': unicode(request.user.username) }) # if auth : # group_id = str(auth._id) # else : # pass try: group_id = ObjectId(group_id) except: group_name, group_id = get_group_name_id(group_id) ''' app = None if app_id is None: app = node_collection.one({'_type': "GSystemType", 'name': app_name}) if app: app_id = str(app._id) else: app = node_collection.one({'_id': ObjectId(app_id)}) app_name = app.name ''' app_set = "" app_collection_set = [] title = "" session_of="" module="" Add="" announced_course ="" batch ="" event_gst = None event_gs = None property_order_list = [] template_prefix = "mis" '''if request.user: if auth is None: auth = node_collection.one({'_type': 'Author', 'name': unicode(request.user.username)}) agency_type = auth.agency_type Event_Types = node_collection.one({'_type': "GSystemType", 'name': agency_type}, {'collection_set': 1}) if Event_Types: for eachset in Event_Types.collection_set: app_collection_set.append(node_collection.one({"_id": eachset}, {'_id': 1, 'name': 1, 'type_of': 1})) ''' group_inverse_rel_id = [] Group_type=node_collection.one({'_id':ObjectId(group_id)}) for i in Group_type.relation_set: if unicode("group_of") in i.keys(): group_inverse_rel_id = i['group_of'] Group_name = node_collection.one({'_type':'GSystem','_id':{'$in':group_inverse_rel_id}}) Eventtype='Eventtype' if Group_name: if (any( unicode('has_group') in d for d in Group_name.relation_set)) == True: Eventtype='CollegeEvents' else: Eventtype='Eventtype' Glisttype=node_collection.find({"_type": "GSystemType", "name":"GList"}) Event_Types = node_collection.one({"member_of":ObjectId(Glisttype[0]["_id"]),"name":Eventtype},{'collection_set': 1}) app_collection_set=[] if Event_Types: for eachset in Event_Types.collection_set: app_collection_set.append(node_collection.one({"_id": eachset}, {'_id': 1, 'name': 1, 'type_of': 1})) # for eachset in app.collection_set: # app_collection_set.append(node_collection.one({"_id":eachset}, {'_id': 1, 'name': 1, 'type_of': 1})) iteration=request.POST.get("iteration","") if iteration == "": iteration=1 for i in range(int(iteration)): if app_set_id: event_gst = node_collection.one({'_type': "GSystemType", '_id': ObjectId(app_set_id)}, {'name': 1, 'type_of': 1}) title = event_gst.name event_gs = node_collection.collection.GSystem() event_gs.member_of.append(event_gst._id) if app_set_instance_id: event_gs = node_collection.one({'_type': "GSystem", '_id': ObjectId(app_set_instance_id)}) property_order_list = get_property_order_with_value(event_gs)#.property_order if request.method == "POST": # [A] Save event-node's base-field(s) # print "\n Going before....", type(event_gs), "\n event_gs.keys(): ", event_gs.keys() # get_node_common_fields(request, event_gs, group_id, event_gst) # print "\n Going after....", type(event_gs), "\n event_gs.keys(): ", event_gs.keys() # print "\n event_gs: \n", event_gs.keys() # for k, v in event_gs.items(): # print "\n ", k, " -- ", v is_changed = get_node_common_fields(request, event_gs, group_id, event_gst) if is_changed: # Remove this when publish button is setup on interface event_gs.status = u"PUBLISHED" if (request.POST.get("name","")) == "": if i>0: field_value=request.POST.get('start_time'+"_"+str(i),'') else: field_value = request.POST.get('start_time','') if event_gst.name == "Exam": name = "Exam" + "--" + slugify(request.POST.get("batch_name","")) + "--" + field_value else: name= "Class" + "--"+ slugify(request.POST.get("course_name","")) + "--" + field_value event_gs.name=name event_gs.save(is_changed=is_changed,groupid=group_id) # print "\n Event: ", event_gs._id, " -- ", event_gs.name, "\n" # [B] Store AT and/or RT field(s) of given event-node (i.e., event_gs) for tab_details in property_order_list: for field_set in tab_details[1]: # field_set pattern -- {[field_set[0]:node_structure, field_set[1]:field_base/AT/RT_instance{'_id':, 'name':, 'altnames':}, field_set[2]:node_value]} # field_set pattern -- {'_id', 'data_type', 'name', 'altnames', 'value'} # print " ", field_set["name"] # * Fetch only Attribute field(s) / Relation field(s) if field_set.has_key('_id'): field_instance = node_collection.one({'_id': field_set['_id']}) field_instance_type = type(field_instance) if field_instance_type in [AttributeType, RelationType]: if field_instance["name"] == "attendees": continue field_data_type = field_set['data_type'] # Fetch field's value depending upon AT/RT and Parse fetched-value depending upon that field's data-type if field_instance_type == AttributeType: if "File" in field_instance["validators"]: # Special case: AttributeTypes that require file instance as it's value in which case file document's ObjectId is used if field_instance["name"] in request.FILES: field_value = request.FILES[field_instance["name"]] else: field_value = "" # Below 0th index is used because that function returns tuple(ObjectId, bool-value) if field_value != '' and field_value != u'': file_name = event_gs.name + " -- " + field_instance["altnames"] content_org = "" tags = "" field_value = save_file(field_value, file_name, request.user.id, group_id, content_org, tags, access_policy="PRIVATE", count=0, first_object="", oid=True)[0] if "date_month_day_year" in field_instance["validators"]: if i>0: field_value=request.POST.get(field_instance["name"]+"_"+str(i)) else: field_value = request.POST[field_instance["name"]] else: # Other AttributeTypes field_value = request.POST[field_instance["name"]] # field_instance_type = "GAttribute" # print "\n Parsing data for: ", field_instance["name"] if field_instance["name"] in ["12_passing_year", "degree_passing_year"]: #, "registration_year"]: field_value = parse_template_data(field_data_type, field_value, date_format_string="%Y") elif field_instance["name"] in ["dob", "registration_date"]: field_value = parse_template_data(field_data_type, field_value, date_format_string="%d/%m/%Y") else: field_value = parse_template_data(field_data_type, field_value, date_format_string="%d/%m/%Y %H:%M") if field_value: event_gs_triple_instance = create_gattribute(event_gs._id, node_collection.collection.AttributeType(field_instance), field_value) # print "\n event_gs_triple_instance: ", event_gs_triple_instance._id, " -- ", event_gs_triple_instance.name else: field_value_list = request.POST.getlist(field_instance["name"]) # field_instance_type = "GRelation" #code for creation of relation Session of for i, field_value in enumerate(field_value_list): field_value = parse_template_data(field_data_type, field_value, field_instance=field_instance, date_format_string="%d/%m/%Y %H:%M") field_value_list[i] = field_value if field_value_list: event_gs_triple_instance = create_grelation(event_gs._id, node_collection.collection.RelationType(field_instance), field_value_list) # if isinstance(event_gs_triple_instance, list): # print "\n" # for each in event_gs_triple_instance: # print " event_gs_triple_instance: ", each._id, " -- ", each.name # print "\n" # else: # print "\n event_gs_triple_instance: ", event_gs_triple_instance._id, " -- ", event_gs_triple_instance.name # return HttpResponseRedirect(reverse('page_details', kwargs={'group_id': group_id, 'app_id': page_node._id })) '''return HttpResponseRedirect(reverse(app_name.lower()+":"+template_prefix+'_app_detail', kwargs={'group_id': group_id, "app_id":app_id, "app_set_id":app_set_id}))''' if event_gst.name == u'Classroom Session' or event_gst.name == u'Exam': if i==( (int(iteration))-1): #code to send mail to every one return HttpResponseRedirect(reverse('event_app_instance_detail', kwargs={'group_id': group_id,"app_set_id":app_set_id,"app_set_instance_id":event_gs._id})) else: to_user_list = [] event_organizer_str = "" event_coordinator_str = "" event_organized_by = [] event_coordinator = [] event_node = node_collection.one({'_id':ObjectId(event_gs._id)}) for i in event_node.relation_set: if unicode('event_organised_by') in i.keys(): event_organized_by = i['event_organised_by'] if unicode('has_attendees') in i.keys(): event_attendees = i['has_attendees'] if unicode('event_coordinator') in i.keys(): event_coordinator = i['event_coordinator'] event_url = "/"+str(group_id)+"/event/"+str(app_set_id) +"/"+str(event_node._id) site = Site.objects.get(pk=1) site = site.name.__str__() event_link = "http://" + site + event_url event_organized_by_cur = node_collection.find({"_id":{'$in':event_organized_by}}) event_coordinator_cur = node_collection.find({"_id":{'$in':event_coordinator}}) for i in event_coordinator_cur: event_coordinator_str = event_coordinator_str + i.name + " " for i in event_organized_by_cur: event_organizer_str = event_coordinator_str + i.name + " " for j in event_attendees: auth = node_collection.one({"_id":ObjectId(j)}) user_obj = User.objects.get(id=auth.created_by) if user_obj not in to_user_list: to_user_list.append(user_obj) render_label = render_to_string( "notification/label.html", { "sender": "metaStudio", "activity": "Event Created", "conjunction": "-" }) if event_organized_by: msg_string = "\n Event is organized by " + str ( event_organizer_str ) else: msg_string = "" notification.create_notice_type(render_label,"Invitation for Event"+ " " + str(event_node.name) + msg_string + "\n Event will be co-ordinated by " +str (event_coordinator_str) + "\n- Please click [[" + event_link + "][here]] to view the details of the event" , "notification") notification.send(to_user_list, render_label, {"from_user":"******"}) return HttpResponseRedirect(reverse('event_app_instance_detail', kwargs={'group_id': group_id,"app_set_id":app_set_id,"app_set_instance_id":event_node._id})) event_attendees = request.POST.getlist('has_attendees','') event_gs.get_neighbourhood(event_gs.member_of) course=[] val=False for i in event_gs.relation_set: if unicode('event_has_batch') in i.keys(): batch=node_collection.one({'_type':"GSystem",'_id':ObjectId(i['event_has_batch'][0])}) batch_relation=node_collection.one({'_type':"GSystem",'_id':ObjectId(batch._id)},{'relation_set':1}) for i in batch_relation['relation_set']: if unicode('has_course') in i.keys(): announced_course =node_collection.one({"_type":"GSystem",'_id':ObjectId(i['has_course'][0])}) for i in announced_course.relation_set: if unicode('announced_for') in i.keys(): course=node_collection.one({"_type":"GSystem",'_id':ObjectId(i['announced_for'][0])}) if unicode('session_of') in i.keys(): session_of=node_collection.one({'_type':"GSystem",'_id':ObjectId(i['session_of'][0])}) module=node_collection.one({'_type':"GSystem",'_id':{'$in':session_of.prior_node}}) event_gs.event_coordinator Mis_admin=node_collection.one({"_type":"Group","name":"MIS_admin"}) if Mis_admin: Mis_admin_list=Mis_admin.group_admin Mis_admin_list.append(Mis_admin.created_by) if request.user.id in Mis_admin_list: Add="Allow" else: Add= "Stop" else: Add="Stop" if event_gst.name == u'Classroom Session' or event_gst.name == u'Exam': template="ndf/Nussd_event_Schedule.html" else: template = "ndf/event_create_edit.html" # default_template = "ndf/"+template_prefix+"_create_edit.html" context_variables = { 'group_id': group_id, 'groupid': group_id, 'app_collection_set': app_collection_set, 'app_set_id': app_set_id, 'title':title, 'property_order_list': property_order_list, 'Add':Add } if app_set_instance_id: event_detail={} events={} if event_gs.event_coordinator: event_detail["cordinatorname"]=str(event_gs.event_coordinator[0].name) event_detail["cordinatorid"]=str(event_gs.event_coordinator[0]._id) events["cordinator"]=event_detail if announced_course: event_detail["course"]=str(announced_course.name) event_detail["course_id"]=str(announced_course._id) events["course"]=event_detail event_detail={} if batch: event_detail["batchname"]=str(batch.name) event_detail["batchid"]=str(batch._id) events["batch"]=event_detail event_detail={} if session_of: event_detail["sessionname"]=str(session_of.name) event_detail["sessionid"]=str(session_of._id) for i in session_of.attribute_set: if unicode('course_structure_minutes') in i.keys(): event_detail["sessionminutes"] = str(i['course_structure_minutes']) events["session"]=event_detail event_detail={} if module: event_detail["Modulename"]=str(module.name) event_detail["Moduleid"]=str(module._id) events["Module"]=event_detail context_variables['node'] = event_gs context_variables['edit_details']=events # print "\n template-list: ", [template, default_template] # template = "ndf/fgh.html" # default_template = "ndf/dsfjhk.html" # return render_to_response([template, default_template], return render_to_response(template, context_variables, context_instance = RequestContext(request) )
def handle(self, *args, **options): collection = get_database()[Node.collection_name] Event = collection.Node.find({"_type":"GSystemType","name":{'$in':["Classroom Session","Exam"]}}) yesterday = date.today() - timedelta(1) day_before_yesterday=date.today() - timedelta(2) date1=datetime.date.today() ti=time(0,0) Today=datetime.datetime.combine(date1,ti) yesterday=datetime.datetime.combine(yesterday,ti) day_before_yesterday=datetime.datetime.combine(day_before_yesterday,ti) no_of_days=0 #get the Mis Admin Mis_admin=collection.Node.one({"_type":"Group","name":"MIS_admin"}) Mis_admin_name="" if Mis_admin: Mis_admin_list=Mis_admin.group_admin Mis_admin_list.append(Mis_admin.created_by) user_obj = User.objects.get(id=Mis_admin.created_by) Mis_admin_name=user_obj.username Attendance_Event = collection.Node.find({"member_of":{'$in':[ObjectId(Event[0]._id),ObjectId(Event[1]._id)]},"attribute_set.start_time":{'$gte':day_before_yesterday,'$lt':Today}}) rescheduled_Attendance_events=collection.Node.find({"member_of":{'$in':[ObjectId(Event[0]._id),ObjectId(Event[1]._id)]},"attribute_set.reschedule_attendance.reschedule_till":{'$gt':yesterday}}) rescheduled_events = collection.Node.find({"member_of":{'$in':[ObjectId(Event[0]._id),ObjectId(Event[1]._id)]},"attribute_set.event_edit_reschedule.reschedule_till":{'$gt':yesterday}}) Attendance_marked_event = collection.Node.find({"member_of":{'$in':[ObjectId(Event[0]._id),ObjectId(Event[1]._id)]},"relation_set.has_attended":{"$exists":False},"attribute_set.start_time":{'$gte':yesterday,'lt':Today}}) reschedule_attendance = collection.Node.one({"_type":"AttributeType","name":"reschedule_attendance"}) reschedule_event=collection.Node.one({"_type":"AttributeType","name":"event_edit_reschedule"}) reschedule_dates = {} for i in Attendance_Event: for j in i.attribute_set: if unicode('reschedule_attendance') in j.keys(): reschedule_dates = j['reschedule_attendance'] reschedule_dates["reschedule_allow"] = False create_gattribute(ObjectId(i._id),reschedule_attendance,reschedule_dates) reschedule_dates={} for i in rescheduled_events: for j in i.attribute_set: if unicode('event_edit_reschedule') in j.keys(): reschedule_dates = j['event_edit_reschedule'] reschedule_dates['reschedule_allow'] = False create_gattribute(ObjectId(i._id),reschedule_event,reschedule_dates) reschedule_dates={} for i in rescheduled_Attendance_events: for j in i.attribute_set: if unicode('reschedule_attendance') in j .keys(): reschedule_dates = j['reschedule_attendance'] reschedule_dates["reschedule_allow"] = False create_gattribute(ObjectId(i._id),reschedule_attendance,reschedule_dates) for i in Attendance_marked_event: event_status = collection.Node.one({"_type":"AttributeType","name":"event_status"}) create_gattribute(ObjectId(i._id),event_status,unicode('Incomplete')) for j in i.attribute_set: if unicode("start_time") in j.keys(): if (j["start_time"] >= day_before_yesterday and j["start_time"] < yesterday): no_of_days = 2 if (j["start_time"] >= yesterday and j["start_time"] < Today): no_of_days = 1 to_user_list=[] #node is the node of the college Group node = collection.Node.one({"_type":"Group","_id":{'$in':i.group_set}}) for j in node.group_admin: user_obj = User.objects.get(id=j) if user_obj not in to_user_list: to_user_list.append(user_obj) render_label = render_to_string( "notification/label.html", { "sender": Mis_admin_name, "activity": "Attendance not marked", "conjunction": "-" }) notification.create_notice_type(render_label,"Attendance is not marked for "+ i.name +" Event \n Attendance would be blocked after" + str(no_of_days) + "days" , "notification") notification.send(to_user_list, render_label, {"from_user": Mis_admin_name})
def send_event_notif_to_all_grp_members(group_obj, app_set_id, event_node, user_list): group_id = group_obj._id to_user_list = [] event_organizer_str = "" event_coordinator_str = "" event_organized_by = [] event_attendees = [] event_coordinator = [] for i in event_node.relation_set: if unicode('event_organised_by') in i.keys(): event_organized_by = i['event_organised_by'] if unicode('has_attendees') in i.keys(): event_attendees = i['has_attendees'] if unicode('event_coordinator') in i.keys(): event_coordinator = i['event_coordinator'] try: event_url = "/" + str(group_id) + "/event/" + str( app_set_id) + "/" + str(event_node._id) site = Site.objects.get(pk=1) site = site.name.__str__() event_link = "http://" + site + event_url event_organized_by_cur = node_collection.find( {"_id": { '$in': event_organized_by }}) event_coordinator_cur = node_collection.find( {"_id": { '$in': event_coordinator }}) for i in event_coordinator_cur: event_coordinator_str = event_coordinator_str + i.name + " " for i in event_organized_by_cur: event_organizer_str = event_coordinator_str + i.name + " " render_label = render_to_string( "notification/label.html", { "sender": "metaStudio", "activity": "Event Created", "conjunction": "-" }) if user_list: for j in event_attendees: auth = node_collection.one({"_id": ObjectId(j)}) user_obj = User.objects.get(id=auth.created_by) if user_obj not in to_user_list: to_user_list.append(user_obj) else: for each_member in group_obj.author_set: user_obj = User.objects.get(id=each_member) if user_obj not in to_user_list: to_user_list.append(user_obj) if event_organized_by: msg_string = "\n Event is organized by " + str(event_organizer_str) else: msg_string = "" message_string = "Invitation for Event" + " " + str( event_node.name ) + msg_string + "\n Event will be co-ordinated by " + str( event_coordinator_str ) + "\n- Please click [[" + event_link + "][here]] to view the details of the event" notification.create_notice_type( render_label, message_string, "notification" ) ##This is sent via email to all attendees in the group notification.send(to_user_list, render_label, {"from_user": "******"}) except Exception as mailerror: error_msg = "Unable to send notifications!!! ", str(mailerror) # print error_msg pass
def discussion_reply(request, group_id, node_id): try: group_id = ObjectId(group_id) except: group_name, group_id = get_group_name_id(group_id) try: group_object = node_collection.one({'_id': ObjectId(group_id)}) prior_node = request.POST.get("prior_node_id", "") content_org = request.POST.get("reply_text_content", "") # reply content node = node_collection.one({"_id": ObjectId(node_id)}) # gs_type_node_id = get_relation_value(node_id,'thread_of') gs_type_node_id = None if node and node.relation_set: for each_rel in node.relation_set: if each_rel and "thread_of" in each_rel: gs_type_node_id = each_rel['thread_of'][0] break # grel_dict = get_relation_value(node_id,'thread_of') # is_cursor = grel_dict.get("cursor",False) # if not is_cursor: # gs_type_node_id = grel_dict.get("grel_node") # # grel_id = grel_dict.get("grel_id") # print "\n\n node.name === ", node.member_of_names_list, node._id, node.name # process and save node if it reply has content if content_org: user_id = int(request.user.id) user_name = unicode(request.user.username) # auth = node_collection.one({'_type': 'Author', 'name': user_name }) # creating empty GST and saving it reply_obj = node_collection.collection.GSystem() reply_obj.name = unicode("Reply of:" + str(prior_node)) reply_obj.status = u"PUBLISHED" reply_obj.created_by = user_id reply_obj.modified_by = user_id reply_obj.contributors.append(user_id) reply_obj.member_of.append(ObjectId(reply_st._id)) reply_obj.prior_node.append(ObjectId(prior_node)) reply_obj.group_set.append(ObjectId(group_id)) reply_obj.content_org = unicode(content_org) filename = slugify( unicode("Reply of:" + str(prior_node))) + "-" + user_name + "-" # reply_obj.content = org2html(content_org, file_prefix=filename) reply_obj.content = content_org if gs_type_node_id: reply_obj.origin.append( {'prior_node_id_of_thread': ObjectId(gs_type_node_id)}) if node_id: reply_obj.origin.append({'thread_id': ObjectId(node_id)}) # ============================== # try: upload_files_count = int(request.POST.get("upload_cnt", 0)) # print "upfiles=",upload_files_count lst = [] lstobj_collection = [] usrid = int(request.user.id) if upload_files_count > 0: # print "uploaded items",request.FILES.items() try: thread_obj = node_collection.one( {'_id': ObjectId(prior_node)}) # print "thread_obj : ", thread_obj if thread_obj.access_policy: access_policy = thread_obj.access_policy else: access_policy = u'PUBLIC' except: access_policy = u'PUBLIC' for key, value in request.FILES.items(): fname = unicode(value.__dict__['_name']) # print "key=",key,"value=",value,"fname=",fname fileobj, fs = save_file(value, fname, usrid, group_id, "", "", username=unicode( request.user.username), access_policy=access_policy, count=0, first_object="", oid=True) if type(fileobj) == list: obid = str(list(fileobj)[1]) else: obid = str(fileobj) try: file_obj = node_collection.find_one( {'_id': ObjectId(obid)}) lstobj_collection.append(file_obj._id) except: pass if "CourseEventGroup" not in group_object.member_of_names_list: if group_object.edit_policy == 'EDITABLE_MODERATED': t = create_moderator_task(request, file_obj.group_set[0], file_obj._id, on_upload=True) # print "::: lstobj_collection: ", lstobj_collection # except: # lstobj_collection = [] # ============================== reply_obj.collection_set = lstobj_collection # print "=== lstobj_collection: ", lstobj_collection # saving the reply obj reply_obj.save() formated_time = reply_obj.created_at.strftime( "%B %d, %Y, %I:%M %p") files = [] for each_coll_item in reply_obj.collection_set: temp_list = [] temp = node_collection.one({'_id': ObjectId(each_coll_item)}, { 'mime_type': 1, 'name': 1 }) temp_list.append(str(temp['_id'])) temp_list.append(str(temp['mime_type'])) temp_list.append(str(temp['name'])) files.append(temp_list) # print files # ["status_info", "reply_id", "prior_node", "html_content", "org_content", "user_id", "user_name", "created_at" ] reply = json.dumps([ "reply_saved", str(reply_obj._id), str(reply_obj.prior_node[0]), reply_obj.content, reply_obj.content_org, user_id, user_name, formated_time, files ], cls=DjangoJSONEncoder) # print "===========", reply # ---------- mail/notification sending ------- try: node_creator_user_obj = User.objects.get(id=node.created_by) node_creator_user_name = node_creator_user_obj.username if int(request.user.id) not in node.author_set: node.author_set.append(int(request.user.id)) node.save() site = Site.objects.get(pk=1) site = site.name.__str__() from_user = user_name to_user_list = [node_creator_user_obj] msg = "\n\nDear " + node_creator_user_name + ",\n\n" + \ "A reply has been added in discussion under the " + \ node.member_of_names_list[0] + " named: '" + \ node.name + "' by '" + user_name + "'." activity = "Discussion Reply" render_label = render_to_string( "notification/label.html", { # "sender": from_user, "activity": activity, "conjunction": "-", "link": "url_link" }) notification.create_notice_type(render_label, msg, "notification") notification.send(to_user_list, render_label, {"from_user": from_user}) except Exception as notification_err: print "\n Unable to send notification", notification_err # ---------- END of mail/notification sending --------- return HttpResponse(reply) else: # no reply content return HttpResponse(json.dumps(["no_content"])) except Exception as e: error_message = "\n DiscussionReplyCreateError: " + str(e) + "\n" raise Exception(error_message) return HttpResponse(json.dumps(["Server Error"]))
def discussion_reply(request, group_id, node_id): try: group_id = ObjectId(group_id) except: group_name, group_id = get_group_name_id(group_id) try: group_object = node_collection.one({'_id': ObjectId(group_id)}) prior_node = request.POST.get("prior_node_id", "") content_org = request.POST.get("reply_text_content", "") # reply content node = node_collection.one({"_id": ObjectId(node_id)}) # gs_type_node_id = get_relation_value(node_id,'thread_of') gs_type_node_id = None if node and node.relation_set: for each_rel in node.relation_set: if each_rel and "thread_of" in each_rel: gs_type_node_id = each_rel['thread_of'][0] break # grel_dict = get_relation_value(node_id,'thread_of') # is_cursor = grel_dict.get("cursor",False) # if not is_cursor: # gs_type_node_id = grel_dict.get("grel_node") # # grel_id = grel_dict.get("grel_id") # print "\n\n node.name === ", node.member_of_names_list, node._id, node.name # process and save node if it reply has content if content_org: user_id = int(request.user.id) user_name = unicode(request.user.username) # auth = node_collection.one({'_type': 'Author', 'name': user_name }) # creating empty GST and saving it reply_obj = node_collection.collection.GSystem() reply_obj.name = unicode("Reply of:" + str(prior_node)) reply_obj.status = u"PUBLISHED" reply_obj.created_by = user_id reply_obj.modified_by = user_id reply_obj.contributors.append(user_id) reply_obj.member_of.append(ObjectId(reply_st._id)) reply_obj.prior_node.append(ObjectId(prior_node)) reply_obj.group_set.append(ObjectId(group_id)) reply_obj.content_org = unicode(content_org) filename = slugify(unicode("Reply of:" + str(prior_node))) + "-" + user_name + "-" # reply_obj.content = org2html(content_org, file_prefix=filename) reply_obj.content = content_org if gs_type_node_id: reply_obj.origin.append({'prior_node_id_of_thread': ObjectId(gs_type_node_id)}) if node_id: reply_obj.origin.append({'thread_id': ObjectId(node_id)}) # ============================== # try: upload_files_count=int(request.POST.get("upload_cnt",0)) # print "upfiles=",upload_files_count lst=[] lstobj_collection=[] usrid = int(request.user.id) if upload_files_count > 0: # print "uploaded items",request.FILES.items() try: thread_obj = node_collection.one({'_id': ObjectId(prior_node)}) # print "thread_obj : ", thread_obj if thread_obj.access_policy: access_policy = thread_obj.access_policy else: access_policy = u'PUBLIC' except: access_policy = u'PUBLIC' for key,value in request.FILES.items(): fname=unicode(value.__dict__['_name']) # print "key=",key,"value=",value,"fname=",fname fileobj,fs=save_file(value,fname,usrid,group_id, "", "", username=unicode(request.user.username), access_policy=access_policy, count=0, first_object="", oid=True) if type(fileobj) == list: obid = str(list(fileobj)[1]) else: obid=str(fileobj) try: file_obj=node_collection.find_one({'_id': ObjectId(obid)}) lstobj_collection.append(file_obj._id) except: pass if "CourseEventGroup" not in group_object.member_of_names_list: if group_object.edit_policy == 'EDITABLE_MODERATED': t = create_moderator_task(request, file_obj.group_set[0], file_obj._id,on_upload=True) # print "::: lstobj_collection: ", lstobj_collection # except: # lstobj_collection = [] # ============================== reply_obj.collection_set = lstobj_collection # print "=== lstobj_collection: ", lstobj_collection # saving the reply obj reply_obj.save() formated_time = reply_obj.created_at.strftime("%B %d, %Y, %I:%M %p") files = [] for each_coll_item in reply_obj.collection_set: temp_list = [] temp = node_collection.one({'_id': ObjectId(each_coll_item)}, {'mime_type': 1, 'name': 1}) temp_list.append(str(temp['_id'])) temp_list.append(str(temp['mime_type'])) temp_list.append(str(temp['name'])) files.append(temp_list) # print files # ["status_info", "reply_id", "prior_node", "html_content", "org_content", "user_id", "user_name", "created_at" ] reply = json.dumps( [ "reply_saved", str(reply_obj._id), str(reply_obj.prior_node[0]), reply_obj.content, reply_obj.content_org, user_id, user_name, formated_time, files], cls=DjangoJSONEncoder ) # print "===========", reply # ---------- mail/notification sending ------- try: node_creator_user_obj = User.objects.get(id=node.created_by) node_creator_user_name = node_creator_user_obj.username if int(request.user.id) not in node.author_set: node.author_set.append(int(request.user.id)) node.save() site = Site.objects.get(pk=1) site = site.name.__str__() from_user = user_name to_user_list = [node_creator_user_obj] msg = "\n\nDear " + node_creator_user_name + ",\n\n" + \ "A reply has been added in discussion under the " + \ node.member_of_names_list[0] + " named: '" + \ node.name + "' by '" + user_name + "'." activity = "Discussion Reply" render_label = render_to_string( "notification/label.html", { # "sender": from_user, "activity": activity, "conjunction": "-", "link": "url_link" } ) notification.create_notice_type(render_label, msg, "notification") notification.send(to_user_list, render_label, {"from_user": from_user}) except Exception as notification_err: print "\n Unable to send notification", notification_err # ---------- END of mail/notification sending --------- return HttpResponse( reply ) else: # no reply content return HttpResponse(json.dumps(["no_content"])) except Exception as e: error_message = "\n DiscussionReplyCreateError: " + str(e) + "\n" raise Exception(error_message) return HttpResponse(json.dumps(["Server Error"]))