Ejemplo n.º 1
0
from c2cgeoportal_commons.models.main import OGCServer
from functools import partial
from pyramid.view import view_defaults
from pyramid.view import view_config

from c2cgeoform.schema import GeoFormSchemaNode
from c2cgeoform.views.abstract_views import AbstractViews
from c2cgeoform.views.abstract_views import ListField
from deform.widget import FormWidget

_list_field = partial(ListField, OGCServer)

base_schema = GeoFormSchemaNode(
    OGCServer, widget=FormWidget(fields_template='ogcserver_fields'))
base_schema.add_unique_validator(OGCServer.name, OGCServer.id)


@view_defaults(match_param='table=ogc_servers')
class OGCServerViews(AbstractViews):
    _list_fields = [
        _list_field('id'),
        _list_field('name'),
        _list_field('description'),
        _list_field('url'),
        _list_field('url_wfs'),
        _list_field('type'),
        _list_field('image_type'),
        _list_field('auth'),
        _list_field('wfs_support'),
        _list_field('is_single_tile')
    ]
Ejemplo n.º 2
0
from c2cgeoform.schema import GeoFormManyToManySchemaNode, GeoFormSchemaNode
from c2cgeoform.views.abstract_views import AbstractViews, ListField
from deform.widget import FormWidget
from pyramid.view import view_config, view_defaults
from sqlalchemy.orm import subqueryload

from c2cgeoportal_admin import _
from c2cgeoportal_admin.schemas.functionalities import functionalities_schema_node
from c2cgeoportal_admin.schemas.restriction_areas import restrictionareas_schema_node
from c2cgeoportal_admin.widgets import ChildrenWidget, ChildWidget
from c2cgeoportal_commons.models.main import Role
from c2cgeoportal_commons.models.static import User

_list_field = partial(ListField, Role)

base_schema = GeoFormSchemaNode(Role, widget=FormWidget(fields_template="role_fields"))
base_schema.add_before("extent", functionalities_schema_node.clone())
base_schema.add_before("extent", restrictionareas_schema_node.clone())
base_schema.add_unique_validator(Role.name, Role.id)


def users(node, kw):  # pylint: disable=unused-argument
    dbsession = kw["request"].dbsession
    query = dbsession.query(User).order_by(User.username)
    return [
        {
            "id": user.id,
            "label": user.username,
            "icon_class": "icon-user",
            "edit_url": kw["request"].route_url(
                "c2cgeoform_item",
Ejemplo n.º 3
0
from passwordgenerator import pwgenerator

from sqlalchemy.orm import aliased, subqueryload
from c2cgeoform.schema import GeoFormSchemaNode
from c2cgeoform.views.abstract_views import AbstractViews, ListField
from deform.widget import FormWidget

from c2cgeoportal_commons.models.main import Role
from c2cgeoportal_commons.models.static import User
from c2cgeoportal_commons.lib.email_ import send_email_config
from c2cgeoportal_admin.schemas.roles import roles_schema_node

_list_field = partial(ListField, User)

base_schema = GeoFormSchemaNode(
    User, widget=FormWidget(fields_template='user_fields'))
base_schema.add(roles_schema_node('roles'))
base_schema.add_unique_validator(User.username, User.id)

settings_role = aliased(Role)


@view_defaults(match_param='table=users')
class UserViews(AbstractViews):
    _list_fields = [
        _list_field('id'),
        _list_field('username'),
        _list_field('email'),
        _list_field('last_login'),
        _list_field('expire_on'),
        _list_field('deactivated'),
    LayerWMS, LayerWMTS, OGCServer, LayerGroup, TreeItem

from c2cgeoportal_admin import _
from c2cgeoportal_admin.schemas.dimensions import dimensions_schema_node
from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.interfaces import interfaces_schema_node
from c2cgeoportal_admin.schemas.restriction_areas import restrictionareas_schema_node
from c2cgeoportal_admin.schemas.treeitem import parent_id_node
from c2cgeoportal_admin.views.dimension_layers import DimensionLayerViews

from geoportailv3_geoportal.models import LuxLayerExternalWMS

_list_field = partial(ListField, LuxLayerExternalWMS)

base_schema = GeoFormSchemaNode(
    LuxLayerExternalWMS, widget=FormWidget(fields_template='layer_fields'))
base_schema.add(dimensions_schema_node.clone())
base_schema.add(metadatas_schema_node.clone())
base_schema.add(interfaces_schema_node.clone())
base_schema.add(restrictionareas_schema_node.clone())
base_schema.add_unique_validator(LuxLayerExternalWMS.name,
                                 LuxLayerExternalWMS.id)
base_schema.add(parent_id_node(LayerGroup))


@view_defaults(match_param='table=lux_layer_external_wms')
class LuxLayerExternalWMSViews(DimensionLayerViews):
    _list_fields = DimensionLayerViews._list_fields + [
        _list_field('category_id'),
        _list_field('layer'),
        _list_field('style'),
Ejemplo n.º 5
0
from c2cgeoform.views.abstract_views import AbstractViews, ListField
from deform.widget import FormWidget
from pyramid.view import view_config, view_defaults
from sqlalchemy.orm import subqueryload

from c2cgeoportal_admin import _
from c2cgeoportal_admin.schemas.roles import roles_schema_node
from c2cgeoportal_admin.schemas.treegroup import treeitem_edit_url
from c2cgeoportal_admin.widgets import ChildrenWidget, ChildWidget
from c2cgeoportal_commons.models.main import Layer, RestrictionArea

_list_field = partial(ListField, RestrictionArea)

base_schema = GeoFormSchemaNode(
    RestrictionArea,
    widget=FormWidget(fields_template="restriction_area_fields"))
base_schema.add_before("area", roles_schema_node("roles"))
base_schema.add_unique_validator(RestrictionArea.name, RestrictionArea.id)


def layers(node, kw):  # pylint: disable=unused-argument
    dbsession = kw["request"].dbsession
    query = dbsession.query(Layer).order_by(Layer.name)
    return [{
        "id": layer.id,
        "label": layer.name,
        "icon_class": "icon-{}".format(layer.item_type),
        "edit_url": treeitem_edit_url(kw["request"], layer),
        "group": "All",
    } for layer in query]
Ejemplo n.º 6
0
from deform.widget import FormWidget
from pyramid.view import view_config, view_defaults
from sqlalchemy.orm import subqueryload
from sqlalchemy.sql.functions import concat

from c2cgeoportal_admin.schemas.functionalities import functionalities_schema_node
from c2cgeoportal_admin.schemas.interfaces import interfaces_schema_node
from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.roles import roles_schema_node
from c2cgeoportal_admin.schemas.treegroup import children_schema_node
from c2cgeoportal_admin.views.treeitems import TreeItemViews
from c2cgeoportal_commons.models.main import Functionality, Interface, Role, Theme

_list_field = partial(ListField, Theme)

base_schema = GeoFormSchemaNode(Theme, widget=FormWidget(fields_template="theme_fields"))
base_schema.add(children_schema_node(only_groups=True))
base_schema.add(functionalities_schema_node.clone())
base_schema.add(roles_schema_node("restricted_roles"))
base_schema.add(interfaces_schema_node.clone())
base_schema.add(metadatas_schema_node.clone())
base_schema.add_unique_validator(Theme.name, Theme.id)


@view_defaults(match_param="table=themes")
class ThemeViews(TreeItemViews):

    _list_fields = (
        TreeItemViews._list_fields
        + [
            _list_field("ordering"),
from pyramid.view import view_config

from c2cgeoportal_commons.models.main import RestrictionArea
from c2cgeoportal_admin.schemas.map import map_widget
from c2cgeoform.schema import GeoFormSchemaNode
from c2cgeoportal_admin.schemas.roles import roles_schema_node

from c2cgeoform.views.abstract_views import AbstractViews
from c2cgeoform.views.abstract_views import ListField
from deform.widget import FormWidget

_list_field = partial(ListField, RestrictionArea)

base_schema = GeoFormSchemaNode(
    RestrictionArea,
    widget=FormWidget(fields_template='restriction_area_fields'))
base_schema['area'].widget = map_widget
base_schema.add_before('area', roles_schema_node('roles'))
base_schema.add_unique_validator(RestrictionArea.name, RestrictionArea.id)


@view_defaults(match_param='table=restriction_areas')
class RestrictionAreaViews(AbstractViews):
    _list_fields = [
        _list_field('id'),
        _list_field('name'),
        _list_field('description'),
        _list_field('readwrite'),
        _list_field('roles',
                    renderer=lambda restriction_area: ', '.join(
                        r.name for r in restriction_area.roles)),
Ejemplo n.º 8
0
from pyramid.view import view_config, view_defaults
from sqlalchemy import delete, insert, inspect, update
from zope.sqlalchemy import mark_changed

from c2cgeoportal_admin import _
from c2cgeoportal_admin.schemas.dimensions import dimensions_schema_node
from c2cgeoportal_admin.schemas.interfaces import interfaces_schema_node
from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.restriction_areas import restrictionareas_schema_node
from c2cgeoportal_admin.schemas.treeitem import parent_id_node
from c2cgeoportal_admin.views.dimension_layers import DimensionLayerViews
from c2cgeoportal_commons.models.main import LayerGroup, LayerWMS, LayerWMTS, OGCServer, TreeItem

_list_field = partial(ListField, LayerWMTS)

base_schema = GeoFormSchemaNode(LayerWMTS, widget=FormWidget(fields_template="layer_fields"))
base_schema.add(dimensions_schema_node.clone())
base_schema.add(metadatas_schema_node.clone())
base_schema.add(interfaces_schema_node.clone())
base_schema.add(restrictionareas_schema_node.clone())
base_schema.add_unique_validator(LayerWMTS.name, LayerWMTS.id)
base_schema.add(parent_id_node(LayerGroup))


@view_defaults(match_param="table=layers_wmts")
class LayerWmtsViews(DimensionLayerViews):
    _list_fields = (
        DimensionLayerViews._list_fields
        + [
            _list_field("url"),
            _list_field("layer"),
from c2cgeoportal_commons.models.main import \
    LayerWMS, LayerWMTS, OGCServer, LayerGroup, TreeItem

from c2cgeoportal_admin import _
from c2cgeoportal_admin.schemas.dimensions import dimensions_schema_node
from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.interfaces import interfaces_schema_node
from c2cgeoportal_admin.schemas.restriction_areas import restrictionareas_schema_node
from c2cgeoportal_admin.schemas.treeitem import parent_id_node
from c2cgeoportal_admin.views.dimension_layers import DimensionLayerViews

from geoportailv3_geoportal.models import LuxLayerInternalWMS

_list_field = partial(ListField, LuxLayerInternalWMS)

base_schema = GeoFormSchemaNode(LuxLayerInternalWMS, widget=FormWidget(fields_template='layer_fields'))
base_schema.add(dimensions_schema_node.clone())
base_schema.add(metadatas_schema_node.clone())
base_schema.add(interfaces_schema_node.clone())
base_schema.add(restrictionareas_schema_node.clone())
base_schema.add_unique_validator(LuxLayerInternalWMS.name, LuxLayerInternalWMS.id)
base_schema.add(parent_id_node(LayerGroup))


@view_defaults(match_param='table=lux_layer_internal_wms')
class LuxLayerInternalWMSViews(DimensionLayerViews):
    _list_fields = DimensionLayerViews._list_fields + [
        _list_field('url'),
        _list_field('layers'),
        _list_field('is_poi'),
        _list_field('use_auth'),
Ejemplo n.º 10
0
from c2cgeoform.schema import GeoFormSchemaNode
from c2cgeoform.views.abstract_views import AbstractViews, ListField
from deform.widget import FormWidget
from passwordgenerator import pwgenerator
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config, view_defaults
from sqlalchemy.orm import aliased, subqueryload

from c2cgeoportal_admin.schemas.roles import roles_schema_node
from c2cgeoportal_commons.lib.email_ import send_email_config
from c2cgeoportal_commons.models.main import Role
from c2cgeoportal_commons.models.static import User

_list_field = partial(ListField, User)

base_schema = GeoFormSchemaNode(User, widget=FormWidget(fields_template="user_fields"))
base_schema.add(roles_schema_node(User.roles))
base_schema.add_unique_validator(User.username, User.id)

settings_role = aliased(Role)


@view_defaults(match_param="table=users")
class UserViews(AbstractViews):  # type: ignore
    """The admin user view."""

    _list_fields = [
        _list_field("id"),
        _list_field("username"),
        _list_field("email"),
        _list_field("last_login"),
Ejemplo n.º 11
0
from c2cgeoform.schema import GeoFormSchemaNode
from c2cgeoform.views.abstract_views import ListField
from deform.widget import FormWidget

from c2cgeoportal_commons.models.main import LayerV1

from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.interfaces import interfaces_schema_node
from c2cgeoportal_admin.schemas.restriction_areas import restrictionareas_schema_node
from c2cgeoportal_admin.views.layers import LayerViews

_list_field = partial(ListField, LayerV1)

base_schema = GeoFormSchemaNode(
    LayerV1, widget=FormWidget(fields_template='layer_v1_fields'))
base_schema.add(interfaces_schema_node.clone())
base_schema.add(restrictionareas_schema_node.clone())
base_schema.add(metadatas_schema_node.clone())
base_schema.add_unique_validator(LayerV1.name, LayerV1.id)


@view_defaults(match_param='table=layers_v1')
class LayerV1Views(LayerViews):
    _list_fields = LayerViews._list_fields + [
        _list_field('layer'),
        _list_field('is_checked'),
        _list_field('icon'),
        _list_field('layer_type'),
        _list_field('url'),
        _list_field('image_type'),
Ejemplo n.º 12
0
from c2cgeoform.schema import GeoFormSchemaNode
from c2cgeoform.views.abstract_views import ListField
from deform.widget import FormWidget

from c2cgeoportal_commons.models.main import Theme, Interface, Role, Functionality
from c2cgeoportal_admin.schemas.treegroup import children_schema_node
from c2cgeoportal_admin.schemas.functionalities import functionalities_schema_node
from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.interfaces import interfaces_schema_node
from c2cgeoportal_admin.schemas.roles import roles_schema_node
from c2cgeoportal_admin.views.treeitems import TreeItemViews

_list_field = partial(ListField, Theme)

base_schema = GeoFormSchemaNode(
    Theme, widget=FormWidget(fields_template='theme_fields'))
base_schema.add(children_schema_node(only_groups=True))
base_schema.add(functionalities_schema_node.clone())
base_schema.add(roles_schema_node('restricted_roles'))
base_schema.add(interfaces_schema_node.clone())
base_schema.add(metadatas_schema_node.clone())
base_schema.add_unique_validator(Theme.name, Theme.id)


@view_defaults(match_param='table=themes')
class ThemeViews(TreeItemViews):

    _list_fields = TreeItemViews._list_fields + [
        _list_field('ordering'),
        _list_field('public'),
        _list_field('icon'),
Ejemplo n.º 13
0
def _set_form_widget(form, schema, template):
    if getattr(schema, 'widget', None) is None:
        # only change if the user did not provide a custom widget
        form.widget = FormWidget(
            readonly_template='readonly/' + template, template=template)
Ejemplo n.º 14
0
from c2cgeoform.schema import GeoFormSchemaNode
from c2cgeoform.views.abstract_views import AbstractViews, ListField
from deform.widget import FormWidget
from pyramid.view import view_config, view_defaults
from sqlalchemy.orm import subqueryload

from c2cgeoportal_admin.schemas.functionalities import functionalities_schema_node
from c2cgeoportal_admin.schemas.map import map_widget
from c2cgeoportal_admin.schemas.restriction_areas import restrictionareas_schema_node
from c2cgeoportal_commons.models.main import Role

_list_field = partial(ListField, Role)

base_schema = GeoFormSchemaNode(
    Role, widget=FormWidget(fields_template="role_fields"))
base_schema["extent"].widget = map_widget
base_schema.add_before("extent", functionalities_schema_node.clone())
base_schema.add_before("extent", restrictionareas_schema_node.clone())
base_schema.add_unique_validator(Role.name, Role.id)


@view_defaults(match_param="table=roles")
class RoleViews(AbstractViews):
    _list_fields = [
        _list_field("id"),
        _list_field("name"),
        _list_field("description"),
        _list_field(
            "functionalities",
            renderer=lambda role: ", ".join([
Ejemplo n.º 15
0
from pyramid.view import view_config

from c2cgeoform.schema import GeoFormSchemaNode
from c2cgeoform.views.abstract_views import AbstractViews, ListField
from sqlalchemy.orm import subqueryload

from c2cgeoportal_commons.models.main import Role
from c2cgeoportal_admin.schemas.map import map_widget
from c2cgeoportal_admin.schemas.functionalities import functionalities_schema_node
from c2cgeoportal_admin.schemas.restriction_areas import restrictionareas_schema_node
from deform.widget import FormWidget

_list_field = partial(ListField, Role)

base_schema = GeoFormSchemaNode(
    Role, widget=FormWidget(fields_template='role_fields'))
base_schema['extent'].widget = map_widget
base_schema.add_before('extent', functionalities_schema_node.clone())
base_schema.add_before('extent', restrictionareas_schema_node.clone())
base_schema.add_unique_validator(Role.name, Role.id)


@view_defaults(match_param='table=roles')
class RoleViews(AbstractViews):
    _list_fields = [
        _list_field('id'),
        _list_field('name'),
        _list_field('description'),
        _list_field('functionalities',
                    renderer=lambda role: ', '.join([
                        '{}={}'.format(f.name, f.value)
Ejemplo n.º 16
0
from sqlalchemy import delete, insert, inspect, update
from zope.sqlalchemy import mark_changed

from c2cgeoportal_admin import _
from c2cgeoportal_admin.schemas.dimensions import dimensions_schema_node
from c2cgeoportal_admin.schemas.interfaces import interfaces_schema_node
from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.restriction_areas import restrictionareas_schema_node
from c2cgeoportal_admin.schemas.treeitem import parent_id_node
from c2cgeoportal_admin.views.dimension_layers import DimensionLayerViews
from c2cgeoportal_commons.models.main import LayerGroup, LayerWMS, LayerWMTS, OGCServer, TreeItem

_list_field = partial(ListField, LayerWMTS)

base_schema = GeoFormSchemaNode(
    LayerWMTS, widget=FormWidget(fields_template="layer_fields"))
base_schema.add(dimensions_schema_node.clone())
base_schema.add(metadatas_schema_node.clone())
base_schema.add(interfaces_schema_node.clone())
base_schema.add(restrictionareas_schema_node.clone())
base_schema.add_unique_validator(LayerWMTS.name, LayerWMTS.id)
base_schema.add(parent_id_node(LayerGroup))


@view_defaults(match_param="table=layers_wmts")
class LayerWmtsViews(DimensionLayerViews):
    _list_fields = (DimensionLayerViews._list_fields + [
        _list_field("url"),
        _list_field("layer"),
        _list_field("style"),
        _list_field("matrix_set"),
Ejemplo n.º 17
0
from c2cgeoform.schema import GeoFormSchemaNode
from c2cgeoform.views.abstract_views import ListField
from deform.widget import FormWidget
from pyramid.view import view_config, view_defaults

from c2cgeoportal_admin.schemas.interfaces import interfaces_schema_node
from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.restriction_areas import restrictionareas_schema_node
from c2cgeoportal_admin.schemas.treeitem import parent_id_node
from c2cgeoportal_admin.views.dimension_layers import DimensionLayerViews
from c2cgeoportal_commons.models.main import LayerGroup, LayerVectorTiles

_list_field = partial(ListField, LayerVectorTiles)


base_schema = GeoFormSchemaNode(LayerVectorTiles, widget=FormWidget(fields_template="layer_fields"))
base_schema.add(metadatas_schema_node.clone())
base_schema.add(interfaces_schema_node.clone())
base_schema.add(restrictionareas_schema_node.clone())
base_schema.add_unique_validator(LayerVectorTiles.name, LayerVectorTiles.id)
base_schema.add(parent_id_node(LayerGroup))


@view_defaults(match_param="table=layers_vectortiles")
class LayerVectorTilesViews(DimensionLayerViews):
    _list_fields = (
        DimensionLayerViews._list_fields
        + [_list_field("style"), _list_field("xyz")]
        + DimensionLayerViews._extra_list_fields
    )
    _id_field = "id"
Ejemplo n.º 18
0
from c2cgeoform.schema import GeoFormSchemaNode
from c2cgeoform.views.abstract_views import ListField
from deform.widget import FormWidget
from pyramid.view import view_config, view_defaults

from c2cgeoportal_admin.schemas.interfaces import interfaces_schema_node
from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.restriction_areas import restrictionareas_schema_node
from c2cgeoportal_admin.schemas.treeitem import parent_id_node
from c2cgeoportal_admin.views.dimension_layers import DimensionLayerViews
from c2cgeoportal_commons.models.main import LayerGroup, LayerVectorTiles

_list_field = partial(ListField, LayerVectorTiles)

base_schema = GeoFormSchemaNode(
    LayerVectorTiles, widget=FormWidget(fields_template="layer_fields"))
base_schema.add(metadatas_schema_node.clone())
base_schema.add(interfaces_schema_node.clone())
base_schema.add(restrictionareas_schema_node.clone())
base_schema.add_unique_validator(LayerVectorTiles.name, LayerVectorTiles.id)
base_schema.add(parent_id_node(LayerGroup))


@view_defaults(match_param="table=layers_vectortiles")
class LayerVectorTilesViews(DimensionLayerViews):
    _list_fields = (
        DimensionLayerViews._list_fields +
        [_list_field("style"), _list_field("xyz")] +
        DimensionLayerViews._extra_list_fields)
    _id_field = "id"
    _model = LayerVectorTiles
Ejemplo n.º 19
0
class Issue(Base):
    __tablename__ = "issue"
    __table_args__ = {"schema": schema}
    __colanderalchemy_config__ = {
        "title": _("Issue"),
        "plural": _("Issues"),
        "widget": FormWidget(fields_template="issue_fields"),
    }

    id = Column(
        Integer,
        primary_key=True,
        info={
            # the `colanderalchemy` property allows to set a custom title for the
            # column or to use a specific widget.
            "colanderalchemy": {"title": _("Identifier"), "widget": HiddenWidget()}
        },
    )
    hash = Column(
        Text,
        nullable=False,
        unique=True,
        default=lambda: str(uuid4()),
        info={"colanderalchemy": {"exclude": True}, "c2cgeoform": {"duplicate": False}},
    )
    request_date = Column(
        Date,
        nullable=False,
        server_default=func.now(),
        info={"colanderalchemy": {"title": _("Request date")}},
    )
    geometry = Column(
        geoalchemy2.Geometry("POINT", 4326, management=True),
        info={
            "colanderalchemy": {
                "title": _("Position"),
                "typ": colander_ext.Geometry(
                    "POINT", srid=4326, map_srid=_map_config["srid"]
                ),
                "widget": deform_ext.MapWidget(
                    map_options=_map_config, item_css_class="item-geometry"
                ),
            }
        },
    )
    type_id = Column(
        Integer,
        ForeignKey("{}.type.id".format(schema)),
        nullable=False,
        info={
            "colanderalchemy": {
                "title": _("Type"),
                "widget": RelationSelectWidget(
                    Type,
                    "id",
                    "label_en",
                    order_by="label_en",
                    default_value=("", _("- Select -")),
                ),
            }
        },
    )
    type = relationship(Type, info={"colanderalchemy": {"exclude": True}})
    status = Column(
        Enum(*tuple(STATUSES.keys()), native_enum=False, name="status"),
        nullable=False,
        default="new",
        info={
            "colanderalchemy": {
                "title": _("Status"),
                "widget": SelectWidget(
                    values=list(STATUSES.items()),
                    readonly=True,
                    item_css_class="item-status",
                ),
            }
        },
    )

    @property
    def status_de(self):
        return self.status_i18n("de")

    @property
    def status_en(self):
        return self.status_i18n("en")

    @property
    def status_fr(self):
        return self.status_i18n("fr")

    def status_i18n(self, locale):
        localizer = make_localizer(locale, [resource_filename("getitfixed", "locale")])
        return localizer.translate(STATUSES[self.status])

    description = Column(
        Text,
        nullable=False,
        info={
            "colanderalchemy": {
                "title": _("Description of the problem"),
                "widget": TextAreaWidget(rows=3),
            }
        },
    )
    localisation = Column(
        String(254), info={"colanderalchemy": {"title": _("Localisation")}}
    )
    photos = relationship(
        Photo,
        cascade="all, delete-orphan",
        info={"colanderalchemy": {"title": _("Photos")}},
    )
    firstname = Column(String(100), info={"colanderalchemy": {"title": _("Firstname")}})
    lastname = Column(String(100), info={"colanderalchemy": {"title": _("Lastname")}})
    phone = Column(
        String(20),
        info={"colanderalchemy": {"title": _("Phone"), "widget": TelWidget()}},
    )
    email = Column(
        String(254),
        nullable=False,
        info={
            "colanderalchemy": {
                "title": _("Email"),
                "validator": colander.Email(),
                "description": _(
                    "This field is required to keep you informed about issue events"
                ),
            }
        },
    )
    private = Column(
        Boolean,
        nullable=False,
        server_default=text("False"),
        info={"colanderalchemy": {"title": _("Private"), "exclude": True}},
    )
    events = relationship(
        "Event",
        order_by="desc(Event.date)",
        backref=backref("issue", info={"colanderalchemy": {"exclude": True}}),
        info={
            "colanderalchemy": {
                "title": _("Events"),
                "widget": SequenceWidget(readonly=True, item_css_class="item-events"),
            }
        },
    )
    public_events = relationship(
        "Event",
        order_by="desc(Event.date)",
        primaryjoin="and_(Event.issue_id==Issue.id, Event.private==False)",
    )

    category = association_proxy("type", "category")

    def icon_url(self, request):
        return self.type.icon_url(request) if self.type else default_icon_url(request)

    def full_name(self):
        return "{} {}".format(self.firstname or "", self.lastname or "").strip()
Ejemplo n.º 20
0
from c2cgeoform.schema import GeoFormSchemaNode
from c2cgeoform.views.abstract_views import AbstractViews, ItemAction, ListField, UserMessage
from deform.widget import FormWidget
from pyramid.httpexceptions import HTTPNotFound
from pyramid.view import view_config, view_defaults
from sqlalchemy import inspect

from c2cgeoportal_admin import _
from c2cgeoportal_admin.lib.ogcserver_synchronizer import OGCServerSynchronizer
from c2cgeoportal_commons.lib.literal import Literal
from c2cgeoportal_commons.models.main import OGCServer

_list_field = partial(ListField, OGCServer)

base_schema = GeoFormSchemaNode(
    OGCServer, widget=FormWidget(fields_template="ogcserver_fields"))
base_schema.add_unique_validator(OGCServer.name, OGCServer.id)


@view_defaults(match_param="table=ogc_servers")
class OGCServerViews(AbstractViews):  # type: ignore
    """The OGC server administration view."""

    _list_fields = [
        _list_field("id"),
        _list_field("name"),
        _list_field("description"),
        _list_field("url"),
        _list_field("url_wfs"),
        _list_field("type"),
        _list_field("image_type"),
Ejemplo n.º 21
0
from c2cgeoform.views.abstract_views import AbstractViews, ListField
from deform.widget import FormWidget
from passwordgenerator import pwgenerator
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config, view_defaults
from sqlalchemy.orm import aliased, subqueryload

from c2cgeoportal_admin.schemas.roles import roles_schema_node
from c2cgeoportal_commons.lib.email_ import send_email_config
from c2cgeoportal_commons.models.main import Role
from c2cgeoportal_commons.models.static import User

_list_field = partial(ListField, User)

base_schema = GeoFormSchemaNode(
    User, widget=FormWidget(fields_template="user_fields"))
base_schema.add(roles_schema_node("roles"))
base_schema.add_unique_validator(User.username, User.id)

settings_role = aliased(Role)


@view_defaults(match_param="table=users")
class UserViews(AbstractViews):
    _list_fields = [
        _list_field("id"),
        _list_field("username"),
        _list_field("email"),
        _list_field("last_login"),
        _list_field("expire_on"),
        _list_field("deactivated"),
Ejemplo n.º 22
0
from pyramid.view import view_config

from c2cgeoform.schema import GeoFormSchemaNode
from c2cgeoform.views.abstract_views import ListField
from deform.widget import FormWidget

from c2cgeoportal_admin.schemas.treegroup import children_schema_node
from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.treeitem import parent_id_node
from c2cgeoportal_admin.views.treeitems import TreeItemViews
from c2cgeoportal_commons.models.main import LayerGroup, TreeGroup

_list_field = partial(ListField, LayerGroup)

base_schema = GeoFormSchemaNode(
    LayerGroup, widget=FormWidget(fields_template='layer_group_fields'))
base_schema.add(children_schema_node())
base_schema.add(metadatas_schema_node.clone())
base_schema.add_unique_validator(LayerGroup.name, LayerGroup.id)
base_schema.add(parent_id_node(TreeGroup))


@view_defaults(match_param='table=layer_groups')
class LayerGroupsViews(TreeItemViews):

    _list_fields = TreeItemViews._list_fields + [
        _list_field('is_expanded'),
        _list_field('is_internal_wms'),
        _list_field('is_base_layer')] + \
        TreeItemViews._extra_list_fields
Ejemplo n.º 23
0
from deform.widget import FormWidget

from c2cgeoportal_admin import _
from c2cgeoportal_admin.schemas.dimensions import dimensions_schema_node
from c2cgeoportal_commons.models.main import \
    LayerWMTS, LayerWMS, LayerGroup, OGCServer, TreeItem
from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.interfaces import interfaces_schema_node
from c2cgeoportal_admin.schemas.restriction_areas import restrictionareas_schema_node
from c2cgeoportal_admin.schemas.treeitem import parent_id_node
from c2cgeoportal_admin.views.dimension_layers import DimensionLayerViews

_list_field = partial(ListField, LayerWMTS)

base_schema = GeoFormSchemaNode(
    LayerWMTS, widget=FormWidget(fields_template='layer_fields'))
base_schema.add(dimensions_schema_node.clone())
base_schema.add(metadatas_schema_node.clone())
base_schema.add(interfaces_schema_node.clone())
base_schema.add(restrictionareas_schema_node.clone())
base_schema.add_unique_validator(LayerWMTS.name, LayerWMTS.id)
base_schema.add(parent_id_node(LayerGroup))


@view_defaults(match_param='table=layers_wmts')
class LayerWmtsViews(DimensionLayerViews):
    _list_fields = DimensionLayerViews._list_fields + [
        _list_field('url'),
        _list_field('layer'),
        _list_field('style'),
        _list_field('matrix_set'),
Ejemplo n.º 24
0
from pyramid.view import view_config, view_defaults
from sqlalchemy.orm import subqueryload
from sqlalchemy.sql.functions import concat

from c2cgeoportal_admin.schemas.functionalities import functionalities_schema_node
from c2cgeoportal_admin.schemas.interfaces import interfaces_schema_node
from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.roles import roles_schema_node
from c2cgeoportal_admin.schemas.treegroup import children_schema_node
from c2cgeoportal_admin.views.treeitems import TreeItemViews
from c2cgeoportal_commons.models.main import Functionality, Interface, Role, Theme

_list_field = partial(ListField, Theme)

base_schema = GeoFormSchemaNode(
    Theme, widget=FormWidget(fields_template="theme_fields"))
base_schema.add(children_schema_node(only_groups=True))
base_schema.add(functionalities_schema_node.clone())
base_schema.add(roles_schema_node("restricted_roles"))
base_schema.add(interfaces_schema_node.clone())
base_schema.add(metadatas_schema_node.clone())
base_schema.add_unique_validator(Theme.name, Theme.id)


@view_defaults(match_param="table=themes")
class ThemeViews(TreeItemViews):

    _list_fields = (TreeItemViews._list_fields + [
        _list_field("ordering"),
        _list_field("public"),
        _list_field("icon"),
Ejemplo n.º 25
0
_list_field = partial(ListField, Functionality)


def _translate_available_functionality(
        available_functionality: Dict[str, Any],
        request: pyramid.request.Request) -> Dict[str, Any]:
    result = {}
    result.update(available_functionality)
    result["description"] = request.localizer.translate(
        _(available_functionality.get("description", "").strip()))
    return result


base_schema = GeoFormSchemaNode(
    Functionality,
    widget=FormWidget(fields_template="functionality_fields"),
    functionalities=colander.deferred(
        lambda node, kw: {
            f["name"]: _translate_available_functionality(f, kw["request"])
            for f in kw["request"].registry.settings["admin_interface"][
                "available_functionalities"]
        },
    ),
)


@view_defaults(match_param="table=functionalities")
class FunctionalityViews(AbstractViews):  # type: ignore
    """The functionality administration view."""

    _list_fields = [