コード例 #1
0
def inviteSubjects(data, id, request):
    logger = logging.getLogger(__name__)
    logger.info("Invite subjects")
    logger.info(data)

    subjectInvitations = data["subjectInvitations"]

    es = experiment_sessions.objects.get(id=id)

    logger.info(es.canceled)

    if len(subjectInvitations) == 0 or es.canceled:
        return JsonResponse({"status":"fail", "mailResult":{"error_message":"Error: Refresh the page","mail_count":0},"userFails":0,"es_min":es.json_esd(False)}, safe=False)
    
    status = "success" 
    userFails = []              #list of users failed to add
    userSuccesses = []          #list of users add
    userPkList = []             #list of primary keys of added users

    p = parameters.objects.first()
    subjectText = ""

    subjectText = p.invitationTextSubject
    messageText = es.getInvitationEmail()

    # #add users to session
    user_list = []
    userPkList = []

    for i in subjectInvitations:
        try:

            userPkList.append(i['id'])
            es.addUser(i['id'], request.user, False)
            user_list.append({"email" : i['email'],
                              "variables": [{"name" : "first name", "text" : i["first_name"]}]})

        except IntegrityError:
            userFails.append(i)
            status = "fail"
            
    memo = f'Send invitations for session: {es.id}'

    mail_result = send_mass_email_service(user_list, subjectText, messageText, memo)

    if(mail_result["error_message"] != ""):
        status = "fail"

    es.save()

    #store invitation
    storeInvitation(id, userPkList, subjectText, messageText, mail_result['mail_count'], mail_result['error_message'])    

    invitationCount = es.experiment_session_invitations_set.count()

    return JsonResponse({"status":status,
                         "mailResult":mail_result,
                         "userFails":userFails,
                         "invitationCount":invitationCount,
                         "es_min":es.json_esd(True)}, safe=False)
コード例 #2
0
def sendEmail(request, data):
    logger = logging.getLogger(__name__)
    logger.info(f"Send message to all active users {data}")

    if request.user.is_superuser:

        params = parameters.objects.first()

        subjectText = data["subject"]
        messageText = data["text"]

        users_list = User.objects.filter(is_active=True, profile__email_confirmed='yes', profile__type__id=2)

        #debug
        #users_list = users_list[:5]
        # emailList = []

        user_list = []
        for user in users_list:
            user_list.append({"email" : user.email,
                              "variables": [{"name" : "first name", "text" : user.first_name},
                                            {"name" : "contact email", "text" : params.labManager.email}]})
        
        memo = f'Send message to all active users'

        mail_result = send_mass_email_service(user_list, subjectText, messageText, memo)

        #logger.info(emailList)
    else:
        logger.info("Send message to all active users error, not super user : user " + str(request.user.id))
        mail_result = {"mail_count":0, "error_message":"You are not an elevated user."}

    return JsonResponse({"mailResult":mail_result}, safe=False)
コード例 #3
0
def cancelSession(data, id):
    '''
        Cancel session
        :param data: empty {}
        :type data:dict

        :param id:Experiment Session ID
        :type id:int
    '''
    logger = logging.getLogger(__name__)
    logger.info("Cancel Session")
    logger.info(data)
        
    es = experiment_sessions.objects.get(id=id)

    if es.allowEdit():       
        
        es.canceled = True

        params = parameters.objects.first()

        subjectText = params.cancelationTextSubject
        messageText = es.getCancelationEmail()

        user_list = []
        userPkList = []

        for i in es.getConfirmedEmailList():
            userPkList.append(i['user_id'])

            user_list.append({"email" : i['user_email'],
                              "variables": [{"name" : "first name", "text" : i["user_first_name"]}]})
                
        memo = f'Cancel session: {es.id}'

        mail_result = send_mass_email_service(user_list, subjectText, messageText, memo)

        logger.info(userPkList)

        es.save()
    else:
        logger.info("Cancel Session:Failed, not allowed")
        mail_result = {"mail_count":0, "error_message":"Session cannot be canceled.  Subjects have already attended."}

    return JsonResponse({"status":"success", "session" :  es.json(), "mailResult":mail_result}, safe=False)
コード例 #4
0
    def sendReminderEmail(self):
        logger = logging.getLogger(__name__)

        #don't send remind if it has already been sent
        if self.reminder_email_sent:
            logger.warning(f"Send Reminder emails error already sent: session {self.experiment_session}, session day {self.id}")
            return {"emailList": [], "status":"fail"}

        #don't send reminder if session canceled
        if self.experiment_session.canceled:
            logger.warning(f"Send Reminder emails error session canceled: session {self.experiment_session}, session day {self.id}")
            return {"emailList": [], "status":"fail"}

        self.reminder_email_sent = True
        self.save()

        p = parameters.objects.first()
        logger.info(f"Send Reminder emails to: session {self.experiment_session}, session day {self.id}")

        users_list = self.experiment_session_day_users_set.filter(confirmed=True).select_related("user")

        if len(users_list) == 0:
            logger.info(f"No confirmed users for session {self.experiment_session}")
            return {"emailList": users_list, "status":"success"}

        logger.info(users_list)
        user_list = []

        for i in users_list:
            user_list.append({'email':i.user.email,
                              'variables':[{'name':'first name', 'text':i.user.first_name}]})

        logger.info(user_list)

        memo = f"Send reminders for session day: {self.id}"

        mail_result = send_mass_email_service(user_list, p.reminderTextSubject, self.getReminderEmail(), memo)
        logger.info(mail_result)

        #store the number of reminders sent
        self.reminder_email_sent_count = mail_result.get("mail_count", 0)
        self.save()

        return {"emailList": users_list, "status":"success"}
コード例 #5
0
def sendMessage(data, id):
    logger = logging.getLogger(__name__)
    logger.info(f"Send Message: {data}")

    params = parameters.objects.first()

    subjectText = data["subject"]
    messageText = data["text"]

    es = experiment_sessions.objects.get(id=id)

    user_list = []
    userPkList = []

    for i in es.getConfirmedEmailList():
        userPkList.append(i['user_id'])

        user_list.append({"email" : i['user_email'],
                          "variables": [{"name" : "first name", "text" : i["user_first_name"]},
                                        {"name" : "contact email", "text" : params.labManager.email}]})
            
    memo = f'Send message to session: {es.id}'

    mail_result = send_mass_email_service(user_list, subjectText, messageText, memo)

    #logger.info(userPkList)

    #store message result
    m = experiment_session_messages()
    m.experiment_session = es
    m.subjectText = subjectText
    m.messageText = messageText
    m.mailResultSentCount = mail_result['mail_count']
    m.mailResultErrorText = mail_result['error_message']
    m.save()
    m.users.add(*userPkList)
    m.save()

    message_count = es.experiment_session_messages_set.count()

    return JsonResponse({"mailResult":mail_result, "messageCount":message_count}, safe=False)
コード例 #6
0
def send_reset(request, data):
    logger = logging.getLogger(__name__)

    params = parameters.objects.first()

    #convert form into dictionary
    form_data_dict = {}

    for field in data["formData"]:
        form_data_dict[field["name"]] = field["value"]

    form = passwordResetForm(form_data_dict)

    if form.is_valid():

        username = form.cleaned_data['username']

        user_list = User.objects.filter(email=username.lower())

        #logger.info(user_list)

        if user_list.count() != 1:
            logger.info(f"passwordResetView user not found {username}")
            return JsonResponse(
                {
                    "status": "error",
                    "message": "Account not found."
                },
                safe=False)
        else:
            user = user_list.first()
            user.profile.password_reset_key = uuid.uuid4()
            user.profile.save()

            user_list = [{
                "email":
                user.email,
                "variables": [{
                    "name": "first name",
                    "text": user.first_name
                }, {
                    "name": "email",
                    "text": user.email
                }, {
                    "name":
                    "reset link",
                    "text":
                    params.siteURL +
                    reverse('passwordResetChange',
                            args=(user.profile.password_reset_key, ))
                }, {
                    "name": "contact email",
                    "text": params.labManager.email
                }]
            }]

            memo = f"Password reset for: {user}"

            mail_result = send_mass_email_service(
                user_list, params.passwordResetTextSubject,
                params.passwordResetText, memo)

            if mail_result.get("mail_count", -1) > 0:
                logger.info(f"Reset password for {username}")
                return JsonResponse({"status": "success"}, safe=False)

            logger.info(
                f"Reset password failed for {username} : {mail_result}")
            return JsonResponse(
                {
                    "status":
                    "error",
                    "message":
                    "There was a problem sending the email.  Please try again."
                },
                safe=False)

    else:
        logger.info(f"send_reset Reset password validation error")
        return JsonResponse(
            {
                "status": "validation",
                "errors": dict(form.errors.items())
            },
            safe=False)
コード例 #7
0
def getManuallyAddSubject(data,id,request_user,ignoreConstraints):
    '''
        Manually add a subject to a session

        :param data: Form data{"user":{"id":user id}, "sendInvitation":True/False}
        :type data: dict

        :param id: Experiment session id
        :type id: int

        :param request_user: User requesting the manual add
        :type id: django.contrib.auth.models.User

        :param ignoreConstraints: Bypass recuritment check when adding
        :type id: boolean
    '''

    logger = logging.getLogger(__name__)
    logger.info("Manually add subject")
    logger.info(data)

    es = experiment_sessions.objects.get(id=id)
    p = parameters.objects.first()

    if es.canceled:
        return JsonResponse({"status":"fail","mailResult":{"errorMessage":"Error: Refresh the page","mailCount":0},"user":"","es_min":es.json_esd(False)}, safe=False)

    u = data["user"]
    sendInvitation = data["sendInvitation"]

    status = "success"
    failed = False

    #check that user does not violate recruitment constraints
    if not ignoreConstraints:   
        u_list = es.getValidUserList_forward_check([{'id':u["id"]}],True,0,0,[],False,1)

        if len(u_list) == 0:
            failed=True
    elif es.checkUserInSession(User.objects.get(id = u["id"])):
         failed=True

    mail_result =  {"mail_count":0, "error_message":""}   
    
    if not failed:
        subjectText=""
        messageText=""
       
        es.addUser(u["id"],request_user,True)
        es.save()

        if sendInvitation:
            
            user_list = []
            subjectText = p.invitationTextSubject            
            messageText = es.getInvitationEmail()

            user_list.append({"email" : u['email'],
                              "variables": [{"name" : "first name", "text" : u["first_name"]}]})
            
            memo = f'Manual invitation for session: {es.id}'

            mail_result = send_mass_email_service(user_list, subjectText, messageText, memo)

        else:
            mail_result =  {"mail_count":0, "error_message":""}    

        #store invitation
        storeInvitation(id,[u["id"]], subjectText, messageText, mail_result['mail_count'], mail_result['error_message']) 
    else:
        status = "fail"   

    invitationCount=es.experiment_session_invitations_set.count()

    return JsonResponse({"status":status,
                         "mailResult":mail_result,
                         "user":u,
                         "invitationCount":invitationCount,
                         "es_min":es.json_esd(True)}, safe=False)