示例#1
0
    def create_form(self, resource=None, edit_form=False):
        """Return form with fields loaded from DB.

        :param object resource: Optional map object
        :param bool edit_form: Set if edit form
        """
        form = MapForm(self.config_models, obj=resource)

        if edit_form:
            # select responsible contact
            form.responsible.data = self.ContactsHelper.resource_contact_id(
                resource.gdi_oid, self.ContactsHelper.ROLE_RESPONSIBLE)

            # add map layers for resource on edit
            for map_layer in resource.map_layers:
                ows_layer = map_layer.owslayer
                form.sublayers.append_entry({
                    'layer_id':
                    ows_layer.gdi_oid,
                    'layer_name':
                    ows_layer.name,
                    'layer_transparency':
                    map_layer.layer_transparency,
                    'layer_active':
                    map_layer.layer_active,
                    'layer_order':
                    map_layer.layer_order
                })

            if resource.thumbnail_image:
                # set that thumbnail image is present
                form.thumbnail_present = True

            # select background layer
            form.background_layer.data = resource.gdi_oid_default_bg_layer

            # add permissions for resource on edit
            roles = self.PermissionsHelper.resource_roles(resource.gdi_oid)
            for role in roles:
                form.permissions.append_entry({
                    'role_id': role.id,
                    'role_name': role.name,
                    'read': True
                })

        # load related resources from DB
        session = self.session()
        query = session.query(self.BackgroundLayer) \
            .order_by(self.BackgroundLayer.name)
        background_layers = query.all()
        session.close()

        # set choices for responsible select field
        form.responsible.choices = [(0, "")] + \
            self.ContactsHelper.person_choices()

        # reorder fields by layer_order
        form.sublayers.entries.sort(key=lambda f: int(f.layer_order.data))

        # set choices for map layer select field
        form.layer.choices = self.wms_layer_choices()

        # set choices for background layer select field
        form.background_layer.choices = [(0, "")] + [
            (bg_layer.gdi_oid, bg_layer.name) for bg_layer in background_layers
        ]

        # collect role ids from permissions subform
        role_permission_ids = [
            int(permission.data['role_id']) for permission in form.permissions
        ]

        # set choices for role permission select field
        # skip roles from permissions subform
        roles = self.PermissionsHelper.roles()
        form.role.choices = [(role.id, role.name) for role in roles
                             if role.id not in role_permission_ids]

        return form