示例#1
0
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()
示例#2
0
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()
示例#3
0
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)
示例#4
0
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)
示例#5
0
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)
示例#6
0
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)
示例#7
0
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)
示例#8
0
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)
示例#9
0
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)