def remove_user_request(request_id, user_guid): """ Remove user from request and sends email to all agency administrators and to user being removed. Delete row from UserRequests table and stores event object into Events. :param request_id: FOIL request ID :param user_guid: string guid of user being removed """ user_request = UserRequests.query.options(joinedload( UserRequests.user)).filter_by(user_guid=user_guid, request_id=request_id).one() agency_admin_emails = get_agency_emails(request_id, admins_only=True) request = Requests.query.filter_by(id=request_id).one() agency_name = request.agency.name # send email to agency administrators tmp = safely_send_and_add_email( request_id, render_template( 'email_templates/email_user_request_removed.html', request_id=request_id, name=' '.join( [user_request.user.first_name, user_request.user.last_name]), agency_name=agency_name, page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id)), admin=True), 'User Removed from Request {}'.format(request_id), to=agency_admin_emails) # send email to user being removed tmp = safely_send_and_add_email( request_id, render_template( 'email_templates/email_user_request_removed.html', request_id=request_id, name=' '.join( [user_request.user.first_name, user_request.user.last_name]), agency_name=agency_name, page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id))), 'User Removed from Request {}'.format(request_id), to=[user_request.user.email]) old_permissions = user_request.permissions old_point_of_contact = user_request.point_of_contact create_user_request_event(event_type.USER_REMOVED, user_request, old_permissions, old_point_of_contact) delete_object(user_request) request.es_update()
def remove_user_request(request_id, user_guid): """ Remove user from request and sends email to all agency administrators and to user being removed. Delete row from UserRequests table and stores event object into Events. :param request_id: FOIL request ID :param user_guid: string guid of user being removed """ user_request = UserRequests.query.filter_by(user_guid=user_guid, request_id=request_id).first() agency_admin_emails = get_agency_emails(request_id, admins_only=True) request = Requests.query.filter_by(id=request_id).one() agency_name = request.agency.name # send email to agency administrators tmp = safely_send_and_add_email( request_id, render_template( 'email_templates/email_user_request_removed.html', request_id=request_id, name=' '.join([user_request.user.first_name, user_request.user.last_name]), agency_name=agency_name, page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id)), admin=True), 'User Removed from Request {}'.format(request_id), to=agency_admin_emails) # send email to user being removed tmp = safely_send_and_add_email( request_id, render_template( 'email_templates/email_user_request_removed.html', request_id=request_id, name=' '.join([user_request.user.first_name, user_request.user.last_name]), agency_name=agency_name, page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id))), 'User Removed from Request {}'.format(request_id), to=[user_request.user.email]) old_permissions = user_request.permissions old_point_of_contact = user_request.point_of_contact create_user_request_event(event_type.USER_REMOVED, user_request, old_permissions, old_point_of_contact) delete_object(user_request) request.es_update()
def edit_user_request(request_id, user_guid, permissions, point_of_contact): """ Edit a users permissions on a request and notify all agency administrators and the user that the permissions have changed. :param request_id: FOIL request ID :param user_guid: string guid of the user being edited :param permissions: Updated permissions values {'permission': true} :param point_of_contact: boolean value to set user as point of contact or not """ user_request = UserRequests.query.filter_by(user_guid=user_guid, request_id=request_id).one() agency_admin_emails = get_agency_emails(request_id, admins_only=True) agency_name = Requests.query.filter_by(id=request_id).one().agency.name added_permissions = [] removed_permissions = [] for i, val in enumerate(permission.ALL): if i in permissions: added_permissions.append(val) else: removed_permissions.append(val) # send email to agency administrators tmp = safely_send_and_add_email( request_id, render_template( 'email_templates/email_user_request_edited.html', request_id=request_id, name=user_request.user.name, agency_name=agency_name, page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id)), added_permissions=[capability.label for capability in added_permissions], removed_permissions=[capability.label for capability in removed_permissions], admin=True), 'User Permissions Edited for Request {}'.format(request_id), to=agency_admin_emails) # send email to user being edited tmp = safely_send_and_add_email( request_id, render_template( 'email_templates/email_user_request_edited.html', request_id=request_id, name=' '.join([user_request.user.first_name, user_request.user.last_name]), agency_name=agency_name, page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id)), added_permissions=[capability.label for capability in added_permissions], removed_permissions=[capability.label for capability in removed_permissions], ), 'User Permissions Edited for Request {}'.format(request_id), to=[user_request.user.notification_email or user_request.user.email]) old_permissions = user_request.permissions old_point_of_contact = user_request.point_of_contact if added_permissions: user_request.add_permissions([capability.value for capability in added_permissions]) if removed_permissions: user_request.remove_permissions([capability.value for capability in removed_permissions]) determine_point_of_contact_change(request_id, user_request, point_of_contact) create_user_request_event(event_type.USER_PERM_CHANGED, user_request, old_permissions, old_point_of_contact)
def add_user_request(request_id, user_guid, permissions, point_of_contact): """ Create a users permissions entry for a request and notify all agency administrators and the user that the permissions have changed. :param request_id: FOIL request ID :param user_guid: string guid of the user being edited :param permissions: Updated permissions values {'permission': true} :param point_of_contact: boolean value to set user as point of contact or not """ user_request = UserRequests.query.filter_by(user_guid=user_guid, request_id=request_id).first() agency_name = Requests.query.filter_by(id=request_id).one().agency.name if user_request: raise UserRequestException(action="create", request_id=request_id, reason="UserRequest entry already exists.") user = Users.query.filter_by(guid=user_guid).one() agency_admin_emails = get_agency_emails(request_id, admins_only=True) added_permissions = [] for i, val in enumerate(permission.ALL): if i in permissions: added_permissions.append(val) # send email to agency administrators safely_send_and_add_email( request_id, render_template( 'email_templates/email_user_request_added.html', request_id=request_id, name=user.name, agency_name=agency_name, page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id)), added_permissions=[capability.label for capability in added_permissions], admin=True), 'User Added to Request {}'.format(request_id), to=agency_admin_emails) # send email to user being added safely_send_and_add_email( request_id, render_template( 'email_templates/email_user_request_added.html', request_id=request_id, name=user.name, agency_name=agency_name, page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id)), added_permissions=[capability.label for capability in added_permissions], ), 'User Added to Request {}'.format(request_id), to=[user.notification_email or user.email]) if point_of_contact and has_point_of_contact(request_id): remove_point_of_contact(request_id) user_request = UserRequests( user_guid=user.guid, request_id=request_id, request_user_type=user_type_request.AGENCY, permissions=0, point_of_contact=point_of_contact ) create_object(user_request) if added_permissions: user_request.add_permissions([capability.value for capability in added_permissions]) user_request.request.es_update() create_user_request_event(event_type.USER_ADDED, user_request)
def add_user_request(request_id, user_guid, permissions, point_of_contact): """ Create a users permissions entry for a request and notify all agency administrators and the user that the permissions have changed. :param request_id: FOIL request ID :param user_guid: string guid of the user being edited :param permissions: Updated permissions values {'permission': true} :param point_of_contact: boolean value to set user as point of contact or not """ user_request = UserRequests.query.filter_by(user_guid=user_guid, request_id=request_id).first() agency = Requests.query.filter_by(id=request_id).one().agency if user_request: raise UserRequestException(action="create", request_id=request_id, reason="UserRequest entry already exists.") user = Users.query.filter_by(guid=user_guid).one() agency_admin_emails = get_agency_admin_emails(agency) added_permissions = [] for i, val in enumerate(permission.ALL): if i in permissions: added_permissions.append(val) # send email to agency administrators safely_send_and_add_email( request_id, render_template( 'email_templates/email_user_request_added.html', request_id=request_id, name=user.name, agency_name=agency.name, page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id)), added_permissions=[ capability.label for capability in added_permissions ], admin=True), 'User Added to Request {}'.format(request_id), to=agency_admin_emails) # send email to user being added safely_send_and_add_email( request_id, render_template( 'email_templates/email_user_request_added.html', request_id=request_id, name=user.name, agency_name=agency.name, page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id)), added_permissions=[ capability.label for capability in added_permissions ], ), 'User Added to Request {}'.format(request_id), to=[user.notification_email or user.email]) if point_of_contact and has_point_of_contact(request_id): remove_point_of_contact(request_id) user_request = UserRequests(user_guid=user.guid, request_id=request_id, request_user_type=user_type_request.AGENCY, permissions=0, point_of_contact=point_of_contact) create_object(user_request) if added_permissions: user_request.add_permissions( [capability.value for capability in added_permissions]) user_request.request.es_update() create_user_request_event(event_type.USER_ADDED, user_request)
def edit_user_request(request_id, user_guid, permissions, point_of_contact): """ Edit a users permissions on a request and notify all agency administrators and the user that the permissions have changed. :param request_id: FOIL request ID :param user_guid: string guid of the user being edited :param permissions: Updated permissions values {'permission': true} :param point_of_contact: boolean value to set user as point of contact or not """ user_request = UserRequests.query.options(joinedload( UserRequests.user)).filter_by(user_guid=user_guid, request_id=request_id).one() agency = Requests.query.filter_by(id=request_id).one().agency agency_admin_emails = get_agency_admin_emails(agency) added_permissions = [] removed_permissions = [] for i, val in enumerate(permission.ALL): if i in permissions: added_permissions.append(val) else: removed_permissions.append(val) # send email to agency administrators tmp = safely_send_and_add_email( request_id, render_template( 'email_templates/email_user_request_edited.html', request_id=request_id, name=user_request.user.name, agency_name=agency.name, page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id)), added_permissions=[ capability.label for capability in added_permissions ], removed_permissions=[ capability.label for capability in removed_permissions ], admin=True), 'User Permissions Edited for Request {}'.format(request_id), to=agency_admin_emails) # send email to user being edited tmp = safely_send_and_add_email( request_id, render_template( 'email_templates/email_user_request_edited.html', request_id=request_id, name=' '.join( [user_request.user.first_name, user_request.user.last_name]), agency_name=agency.name, page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id)), added_permissions=[ capability.label for capability in added_permissions ], removed_permissions=[ capability.label for capability in removed_permissions ], ), 'User Permissions Edited for Request {}'.format(request_id), to=[user_request.user.notification_email or user_request.user.email]) old_permissions = user_request.permissions old_point_of_contact = user_request.point_of_contact if added_permissions: user_request.add_permissions( [capability.value for capability in added_permissions]) if removed_permissions: user_request.remove_permissions( [capability.value for capability in removed_permissions]) determine_point_of_contact_change(request_id, user_request, point_of_contact) create_user_request_event(event_type.USER_PERM_CHANGED, user_request, old_permissions, old_point_of_contact)
def send_confirmation_email(request, agency, user): """ Sends out a confirmation email to requester and bcc the agency default email associated with the request. Also calls the add_email function to create a Emails object to be stored in the database. :param request: Requests object containing the new created request :param agency: Agencies object containing the agency of the new request :param user: Users object containing the user who created the request """ if agency.is_active: subject = 'Request {} Submitted to {}'.format(request.id, agency.name) else: subject = 'FOIL Request Submitted to {}'.format(agency.name) # get the agency's default email and adds it to the bcc list bcc = [agency.default_email] # gets the email and address information from the requester requester_email = user.email address = user.mailing_address # gets the file link, if a file was provided. file_response = request.responses.filter( Responses.type == response_type.FILE).one_or_none() release_public, release_private, private = ([] for i in range(3)) if file_response is not None: get_file_links(file_response, release_public, release_private, private) file_link = release_private[0] if len(release_private) > 0 else None # generates the view request page URL for this request if agency.is_active: page = urljoin(flask_request.host_url, url_for('request.view', request_id=request.id)) email_template = "email_templates/email_confirmation.html" agency_default_email = None else: page = None email_template = "email_templates/email_not_onboarded.html" agency_default_email = agency.default_email # Determine if custom request forms are enabled if 'enabled' in request.agency.agency_features['custom_request_forms']: custom_request_forms_enabled = request.agency.agency_features[ 'custom_request_forms']['enabled'] else: custom_request_forms_enabled = False # Determine if request description should be hidden when custom forms are enabled if 'description_hidden_by_default' in request.agency.agency_features[ 'custom_request_forms']: description_hidden_by_default = request.agency.agency_features[ 'custom_request_forms']['description_hidden_by_default'] else: description_hidden_by_default = False # grabs the html of the email message so we can store the content in the Emails object email_content = render_template( email_template, current_request=request, agency_name=agency.name, agency_default_email=agency_default_email, user=user, address=address, file_link=file_link, page=page, custom_request_forms_enabled=custom_request_forms_enabled, description_hidden_by_default=description_hidden_by_default) try: # if the requester supplied an email, send it to the request and bcc the agency if requester_email: safely_send_and_add_email( request.id, email_content, subject, to=[requester_email], bcc=bcc, reply_to=agency.default_email, ) # otherwise send the email directly to the agency else: safely_send_and_add_email( request.id, email_content, subject, to=[agency.default_email], ) except AssertionError: sentry.captureException() print('Must include: To, CC, or BCC') except Exception as e: sentry.captureException() print("Error:", e)
def send_confirmation_email(request, agency, user): """ Sends out a confirmation email to requester and bcc the agency default email associated with the request. Also calls the add_email function to create a Emails object to be stored in the database. :param request: Requests object containing the new created request :param agency: Agencies object containing the agency of the new request :param user: Users object containing the user who created the request """ if agency.is_active: subject = 'Request {} Submitted to {}'.format(request.id, agency.name) else: subject = 'FOIL Request Submitted to {}'.format(agency.name) # get the agency's default email and adds it to the bcc list bcc = [agency.default_email] # gets the email and address information from the requester requester_email = user.email address = user.mailing_address # generates the view request page URL for this request if agency.is_active: page = urljoin(flask_request.host_url, url_for('request.view', request_id=request.id)) email_template = "email_templates/email_confirmation.html" agency_default_email = None else: page = None email_template = "email_templates/email_not_onboarded.html" agency_default_email = agency.default_email # grabs the html of the email message so we can store the content in the Emails object email_content = render_template(email_template, current_request=request, agency_name=agency.name, agency_default_email=agency_default_email, user=user, address=address, page=page) try: # if the requester supplied an email, send it to the request and bcc the agency if requester_email: safely_send_and_add_email( request.id, email_content, subject, to=[requester_email], bcc=bcc, ) # otherwise send the email directly to the agency else: safely_send_and_add_email( request.id, email_content, subject, to=[agency.default_email], ) except AssertionError: print('Must include: To, CC, or BCC') except Exception as e: print("Error:", e)
def send_confirmation_email(request, agency, user): """ Sends out a confirmation email to requester and bcc the agency default email associated with the request. Also calls the add_email function to create a Emails object to be stored in the database. :param request: Requests object containing the new created request :param agency: Agencies object containing the agency of the new request :param user: Users object containing the user who created the request """ if agency.is_active: subject = 'Request {} Submitted to {}'.format(request.id, agency.name) else: subject = 'FOIL Request Submitted to {}'.format(agency.name) # get the agency's default email and adds it to the bcc list bcc = [agency.default_email] # gets the email and address information from the requester requester_email = user.email address = user.mailing_address # gets the file link, if a file was provided. file_response = request.responses.filter(Responses.type == response_type.FILE).one_or_none() release_public, release_private, private = ([] for i in range(3)) if file_response is not None: get_file_links(file_response, release_public, release_private, private) file_link = release_private[0] if len(release_private) > 0 else None # generates the view request page URL for this request if agency.is_active: page = urljoin(flask_request.host_url, url_for('request.view', request_id=request.id)) email_template = "email_templates/email_confirmation.html" agency_default_email = None else: page = None email_template = "email_templates/email_not_onboarded.html" agency_default_email = agency.default_email # Determine if custom request forms are enabled if 'enabled' in request.agency.agency_features['custom_request_forms']: custom_request_forms_enabled = request.agency.agency_features['custom_request_forms']['enabled'] else: custom_request_forms_enabled = False # Determine if request description should be hidden when custom forms are enabled if 'description_hidden_by_default' in request.agency.agency_features['custom_request_forms']: description_hidden_by_default = request.agency.agency_features['custom_request_forms'][ 'description_hidden_by_default'] else: description_hidden_by_default = False # grabs the html of the email message so we can store the content in the Emails object email_content = render_template(email_template, current_request=request, agency_name=agency.name, agency_default_email=agency_default_email, user=user, address=address, file_link=file_link, page=page, custom_request_forms_enabled=custom_request_forms_enabled, description_hidden_by_default=description_hidden_by_default) try: # if the requester supplied an email, send it to the request and bcc the agency if requester_email: safely_send_and_add_email( request.id, email_content, subject, to=[requester_email], bcc=bcc, ) # otherwise send the email directly to the agency else: safely_send_and_add_email( request.id, email_content, subject, to=[agency.default_email], ) except AssertionError: sentry.captureException() print('Must include: To, CC, or BCC') except Exception as e: sentry.captureException() print("Error:", e)