Example #1
0
    def before_update_object(self, speaker, data, view_kwargs):
        """
        method to save image urls before updating speaker object
        :param speaker:
        :param data:
        :param view_kwargs:
        :return:
        """
        if not can_edit_after_cfs_ends(speaker.event_id):
            raise ForbiddenError(
                {'source': ''},
                "Cannot edit speaker after the call for speaker is ended")

        if data.get('photo_url') and data['photo_url'] != speaker.photo_url:
            start_image_resizing_tasks(speaker, data['photo_url'])

        if data.get('is_email_overridden') and not has_access(
                'is_organizer', event_id=speaker.event_id):
            raise ForbiddenError(
                {'pointer': 'data/attributes/is_email_overridden'},
                'Organizer access required to override email',
            )
        if (data.get('is_email_overridden')
                and has_access('is_organizer', event_id=speaker.event_id)
                and not data.get('email')):
            data['email'] = current_user.email

        data[
            'complex_field_values'] = validate_custom_form_constraints_request(
                'speaker', self.resource.schema, speaker, data)
Example #2
0
    def before_update_object(self, speaker, data, view_kwargs):
        """
        method to save image urls before updating speaker object
        :param speaker:
        :param data:
        :param view_kwargs:
        :return:
        """
        if not can_edit_after_cfs_ends(speaker.event_id):
            raise ForbiddenError(
                {'source': ''},
                "Cannot edit speaker after the call for speaker is ended")

        if data.get('photo_url') and data['photo_url'] != speaker.photo_url:
            start_image_resizing_tasks(speaker, data['photo_url'])

        check_email_override(data, speaker.event_id)

        excluded = []
        if not data.get('email'):
            # Don't check requirement of email if overriden
            excluded = ['email']
        data[
            'complex_field_values'] = validate_custom_form_constraints_request(
                'speaker', self.resource.schema, speaker, data, excluded)
Example #3
0
    def before_update_object(self, session, data, view_kwargs):
        """
        before update method to verify if session is locked before updating session object
        :param event:
        :param data:
        :param view_kwargs:
        :return:
        """
        if data.get('is_locked') != session.is_locked:
            if not (has_access('is_admin')
                    or has_access('is_organizer', event_id=session.event_id)):
                raise ForbiddenError(
                    {'source': '/data/attributes/is-locked'},
                    "You don't have enough permissions to change this property",
                )

        if session.is_locked and data.get('is_locked') == session.is_locked:
            raise ForbiddenError(
                {'source': '/data/attributes/is-locked'},
                "Locked sessions cannot be edited",
            )

        if not can_edit_after_cfs_ends(session.event_id):
            raise ForbiddenError(
                {'source': ''},
                "Cannot edit session after the call for speaker is ended")
Example #4
0
    def before_update_object(self, session, data, view_kwargs):
        """
        before update method to verify if session is locked before updating session object
        :param event:
        :param data:
        :param view_kwargs:
        :return:
        """
        is_organizer = has_access('is_admin') or has_access(
            'is_organizer', event_id=session.event_id)
        if session.is_locked and not is_organizer:
            raise ForbiddenError(
                {'pointer': '/data/attributes/is-locked'},
                "Locked sessions cannot be edited",
            )

        new_state = data.get('state')

        if new_state and new_state != session.state:
            # State change detected. Verify that state change is allowed
            g.send_email = new_state in [
                'accepted',
                'rejected',
                'confirmed',
                'rejected',
                'canceled',
                'withdrawn',
            ]
            key = 'speaker'
            if is_organizer:
                key = 'organizer'
            state_dict = SESSION_STATE_DICT[key]
            try:
                state_dict[session.state][new_state]
            except KeyError:
                raise ForbiddenError(
                    {'pointer': '/data/attributes/state'},
                    f'You cannot change a session state from "{session.state}" to "{new_state}"',
                )

        if not can_edit_after_cfs_ends(session.event_id):
            raise ForbiddenError(
                {'source': ''},
                "Cannot edit session after the call for speaker is ended")

        # We allow organizers and admins to edit session without validations
        complex_field_values = data.get('complex_field_values', 'absent')
        # Set default to 'absent' to differentiate between None and not sent
        is_absent = complex_field_values == 'absent'
        # True if values are not sent in data JSON
        is_same = data.get(
            'complex_field_values') == session.complex_field_values
        # Using original value to ensure None instead of absent
        # We stop checking validations for organizers only if they may result in data change or absent. See test_session_forms_api.py for more info
        if not (is_organizer and (is_absent or is_same)):
            data[
                'complex_field_values'] = validate_custom_form_constraints_request(
                    'session', self.resource.schema, session, data)
    def before_update_object(self, speaker, data, view_kwargs):
        """
        method to save image urls before updating speaker object
        :param speaker:
        :param data:
        :param view_kwargs:
        :return:
        """
        if not can_edit_after_cfs_ends(speaker.event_id):
            raise ForbiddenException({'source': ''},
                                     "Cannot edit speaker after the call for speaker is ended")

        if data.get('photo_url') and data['photo_url'] != speaker.photo_url:
            start_image_resizing_tasks(speaker, data['photo_url'])

        if data.get('is_email_overridden') and not has_access('is_organizer', event_id=speaker.event_id):
            raise ForbiddenException({'pointer': 'data/attributes/is_email_overridden'},
                                     'Organizer access required to override email')
        elif data.get('is_email_overridden') and has_access('is_organizer', event_id=speaker.event_id) and \
                not data.get('email'):
            data['email'] = current_user.email