Example #1
0
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
Example #2
0
def migrate():
   """ test """
   fp=open("cube_users","r")
   usernames=[]
   userids=[]
   for each in User.objects.all():
      usernames.append(each.username)
      userids.append(each.id)
   line = pickle.loads(fp.read())
   userobj=User.objects.all()[0]
   msg1="Your user account with username '"
   msg2="' has been migrated from cube.metastudio.org to www.metastudio.org"
   msg3="\nIncase you forgot your password, please use 'change password' option to change it.\nFrom now on, please use the site www.metastudio.org . All the resources from beta.metastudio.org will be migrated to this site."
   name=userobj.username
   activ="migrating users"
   site=Site.objects.all()[0]
   sender=name
   for each in line:
      b=each
      a=User()
      if not each['username'] in usernames:
         if each['id'] in userids:
            b['id']=max(userids)+1
         a.__dict__=b
         a.save()
         bx=User.objects.get(username=each['username'])
         msg=msg1+bx.username+msg2+msg3
         render = render_to_string("notification/label.html",{'sender':name,'activity':activ,'conjunction':'-','object':'','site':site,'lin#k':''})
         notification.create_notice_type(render, msg, "notification")
#         notification.send([bx], render, {"from_user": sender})
   fp.close()
    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})
Example #4
0
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
Example #5
0
    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})
Example #6
0
def migrate():
    """ test """
    fp = open("cube_users", "r")
    usernames = []
    userids = []
    for each in User.objects.all():
        usernames.append(each.username)
        userids.append(each.id)
    line = pickle.loads(fp.read())
    userobj = User.objects.all()[0]
    msg1 = "Your user account with username '"
    msg2 = "' has been migrated from cube.metastudio.org to www.metastudio.org"
    msg3 = "\nIncase you forgot your password, please use 'change password' option to change it.\nFrom now on, please use the site www.metastudio.org . All the resources from beta.metastudio.org will be migrated to this site."
    name = userobj.username
    activ = "migrating users"
    site = Site.objects.all()[0]
    sender = name
    for each in line:
        b = each
        a = User()
        if not each['username'] in usernames:
            if each['id'] in userids:
                b['id'] = max(userids) + 1
            a.__dict__ = b
            a.save()
            bx = User.objects.get(username=each['username'])
            msg = msg1 + bx.username + msg2 + msg3
            render = render_to_string(
                "notification/label.html", {
                    'sender': name,
                    'activity': activ,
                    'conjunction': '-',
                    'object': '',
                    'site': site,
                    'lin#k': ''
                })
            notification.create_notice_type(render, msg, "notification")


#         notification.send([bx], render, {"from_user": sender})
    fp.close()
Example #7
0
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
Example #8
0
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})
Example #10
0
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"]))
Example #11
0
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"]))
Example #12
0
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})
Example #14
0
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
Example #15
0
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"]))
Example #16
0
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"]))