예제 #1
0
    def to_representation(self, instance):
        ret = super(GroupSerializer, self).to_representation(instance)

        # add header_logo
        # before check macrogroups and groups number also if is equal to 1 use it

        try:
            macrogroup = instance.macrogroups.get(use_logo_client=True)
            ret['header_logo_img'] = macrogroup.logo_img.name
        except:
            ret['header_logo_img'] = instance.header_logo_img.name

        try:
            macrogroup = instance.macrogroups.get(use_title_client=True)
            ret['name'] = macrogroup.title
        except:
            # change groupData name with title for i18n app
            ret['name'] = instance.title

        # add crs:
        crs = QgsCoordinateReferenceSystem(f'EPSG:{self.instance.srid.srid}')

        # Patch for Proj4 > 4.9.3 version
        if self.instance.srid.srid == 3003:
            proj4 = settings.PROJ4_EPSG_3003
        else:
            proj4 = crs.toProj4()

        ret['crs'] = {
            'epsg': crs.postgisSrid(),
            'proj4': proj4,
            'geographic': crs.isGeographic(),
            'axisinverted': crs.hasAxisInverted()
        }

        # map controls
        ret['mapcontrols'] = [
            mapcontrol.name for mapcontrol in instance.mapcontrols.all()
        ]

        # add projects to group
        ret['projects'] = []
        self.projects = {}

        anonymous_user = get_user_model().get_anonymous()

        for g3wProjectApp in settings.G3WADMIN_PROJECT_APPS:
            Project = apps.get_app_config(g3wProjectApp).get_model('project')
            projects = get_objects_for_user(self.request.user, '{}.view_project'.format(g3wProjectApp), Project) \
                .filter(group=instance)
            projects_anonymous = get_objects_for_user(
                anonymous_user, '{}.view_project'.format(g3wProjectApp),
                Project).filter(group=instance)
            projects = list(set(projects) | set(projects_anonymous))

            for project in projects:
                self.projects[g3wProjectApp + '-' + str(project.id)] = project

                if project.pk == int(
                        self.projectId) and g3wProjectApp == self.projectType:
                    self.project = project

                # project thumbnail
                project_thumb = project.thumbnail.name if bool(project.thumbnail.name) \
                    else '{}client/images/FakeProjectThumb.png'.format(settings.STATIC_URL)

                # Get project url
                if project.url_alias:
                    url = reverse('group-project-map-alias',
                                  args=[project.url_alias])[1:]
                else:
                    url = reverse(
                        'group-project-map',
                        args=[project.group.slug, g3wProjectApp,
                              project.pk])[1:]

                ret['projects'].append({
                    'id':
                    project.id,
                    'title':
                    project.title,
                    'description':
                    project.description,
                    'thumbnail':
                    project_thumb,
                    'type':
                    g3wProjectApp,
                    'gid':
                    "{}:{}".format(g3wProjectApp, project.id),
                    'modified':
                    project.modified.timestamp() if hasattr(
                        project, 'modified') else 0,
                    'url':
                    url
                })

        # baselayers
        ret['baselayers'] = []
        baselayers = instance.baselayers.all().order_by('order')
        for baselayer in baselayers:
            ret['baselayers'].append(BaseLayerSerializer(baselayer).data)

        # add vendorkeys if it is set into settings
        if settings.VENDOR_KEYS:
            ret['vendorkeys'] = settings.VENDOR_KEYS

        # add initproject and overviewproject
        ret['initproject'] = "{}:{}".format(self.projectType, self.projectId)

        # add overviewproject is present
        overviewproject = instance.project_panoramic.all()
        if overviewproject:
            overviewproject = overviewproject[0]
            ret['overviewproject'] = {
                'id':
                int(overviewproject.project_id),
                'type':
                overviewproject.project_type,
                'gid':
                "{}:{}".format(overviewproject.project_type,
                               overviewproject.project_id)
            }
        else:
            ret['overviewproject'] = None

        ret['plugins'] = {}

        # Plugins/Module data
        # Data from plugins can be instance of dict or list
        # - dict results are used only for update 'plugins' API return data
        # - list results are more verbose and action on 'plugins' API section is declared, ie:
        # {
        #     'mode': 'delete',
        #     'data': [<list_plugins_section_to_remove>]
        #  },
        # {
        #     'mode': 'update',
        #     'data': {
        #         '<lugins_name>: {
        #             ...
        #         }
        #     }
        # }

        plugins = initconfig_plugin_start.send(sender=self,
                                               project=self.projectId,
                                               projectType=self.projectType)
        for data_plugin in plugins:
            if data_plugin[1] and isinstance(data_plugin[1], dict):
                ret['plugins'] = copy(ret['plugins'])
                ret['plugins'].update(data_plugin[1])
            elif data_plugin[1] and isinstance(data_plugin[1], list):
                for dp in data_plugin[1]:
                    if dp['mode'] == 'delete':
                        ret['plugins'] = copy(ret['plugins'])
                        for k in dp['data']:
                            try:
                                ret['plugins'].pop(k)
                            except:
                                pass
                    elif dp['mode'] == 'update':
                        ret['plugins'] = copy(ret['plugins'])
                        ret['plugins'].update(dp['data'])

        # powerd_by
        ret['powered_by'] = settings.G3WSUITE_POWERD_BY

        # header customs links
        header_custom_links = getattr(settings,
                                      'G3W_CLIENT_HEADER_CUSTOM_LINKS', None)
        ret['header_custom_links'] = []
        if header_custom_links:

            # check for possible callback
            for head_link in header_custom_links:
                if callable(head_link):
                    ret['header_custom_links'].append(head_link(self.request))
                else:
                    ret['header_custom_links'].append(head_link)

        # custom layout
        ret['layout'] = {}

        # add legend settings if set to layout
        layout_legend = getattr(settings, 'G3W_CLIENT_LEGEND', None)
        if layout_legend:
            ret['layout']['legend'] = layout_legend

        # Check if G3W_CLIENT_LEGEND['layertitle'] set it tu false
        if self.project.legend_position == 'toc':
            if layout_legend:
                ret['layout']['legend']['layertitle'] = False
            else:
                ret['layout']['legend'] = {'layertitle': False}

        # add legend settings if set to layout
        layout_right_panel = getattr(settings, 'G3W_CLIENT_RIGHT_PANEL', None)
        if layout_right_panel:
            ret['layout']['rightpanel'] = layout_right_panel

        return ret
예제 #2
0
    def to_representation(self, instance):
        ret = super(GroupSerializer, self).to_representation(instance)

        # add header_logo
        # before check macrogroups number anche if is equal to 1 use it
        try:
            macrogroup = instance.macrogroups.get(use_title_logo_client=True)
            ret['header_logo_img'] = macrogroup.logo_img.name

            # change title
            ret['name'] = macrogroup.title
        except:
            ret['header_logo_img'] = instance.header_logo_img.name

        # add crs:
        ret['crs'] = int(str(self.instance.srid.srid))
        ret['proj4'] = self.instance.srid.proj4text

        # map controls
        ret['mapcontrols'] = [
            mapcontrol.name for mapcontrol in instance.mapcontrols.all()
        ]

        # add projects to group
        ret['projects'] = []
        self.projects = {}

        anonymous_user = get_user_model().get_anonymous()

        for g3wProjectApp in settings.G3WADMIN_PROJECT_APPS:
            Project = apps.get_app_config(g3wProjectApp).get_model('project')
            projects = get_objects_for_user(self.request.user, '{}.view_project'.format(g3wProjectApp), Project) \
                .filter(group=instance)
            projects_anonymous = get_objects_for_user(
                anonymous_user, '{}.view_project'.format(g3wProjectApp),
                Project).filter(group=instance)
            projects = list(set(projects) | set(projects_anonymous))
            for project in projects:
                self.projects[g3wProjectApp + '-' + str(project.id)] = project

                # project thumbnail
                project_thumb = project.thumbnail.name if bool(project.thumbnail.name) \
                    else '{}client/images/FakeProjectThumb.png'.format(settings.STATIC_URL)
                ret['projects'].append({
                    'id':
                    project.id,
                    'title':
                    project.title,
                    'description':
                    project.description,
                    'thumbnail':
                    project_thumb,
                    'type':
                    g3wProjectApp,
                    'gid':
                    "{}:{}".format(g3wProjectApp, project.id)
                })

        # baselayers
        ret['baselayers'] = []
        baselayers = instance.baselayers.all()
        for baselayer in baselayers:
            ret['baselayers'].append(BaseLayerSerializer(baselayer).data)

        # add initproject and overviewproject
        ret['initproject'] = "{}:{}".format(self.projectType, self.projectId)

        # add overviewproject is present
        overviewproject = instance.project_panoramic.all()
        if overviewproject:
            overviewproject = overviewproject[0]
            ret['overviewproject'] = {
                'id':
                int(overviewproject.project_id),
                'type':
                overviewproject.project_type,
                'gid':
                "{}:{}".format(overviewproject.project_type,
                               overviewproject.project_id)
            }
        else:
            ret['overviewproject'] = None

        ret['plugins'] = {}

        # plugins/module data
        dataPlugins = initconfig_plugin_start.send(
            sender=self, project=self.projectId, projectType=self.projectType)
        for dataPlugin in dataPlugins:
            if dataPlugin[1]:
                ret['plugins'] = copy(ret['plugins'])
                ret['plugins'].update(dataPlugin[1])

        # powerd_by
        ret['powered_by'] = settings.G3WSUITE_POWERD_BY

        # header customs links
        header_custom_links = getattr(settings,
                                      'G3W_CLIENT_HEADER_CUSTOM_LINKS', None)
        if header_custom_links:
            ret['header_custom_links'] = header_custom_links

        # custom layout
        ret['layout'] = {}

        # add legend settings if set to layout
        layout_legend = getattr(settings, 'G3W_CLIENT_LEGEND', None)
        if layout_legend:
            ret['layout']['legend'] = layout_legend

        # add legend settings if set to layout
        layout_right_panel = getattr(settings, 'G3W_CLIENT_RIGHT_PANEL', None)
        if layout_right_panel:
            ret['layout']['rightpanel'] = layout_right_panel

        return ret
예제 #3
0
    def to_representation(self, instance):
        ret = super(GroupSerializer, self).to_representation(instance)

        # add header_logo
        ret['header_logo_img'] = instance.header_logo_img.name

        # add crs:
        ret['crs'] = int(str(self.instance.srid.srid))
        ret['proj4'] = self.instance.srid.proj4text

        # map controls
        ret['mapcontrols'] = [
            mapcontrol.name for mapcontrol in instance.mapcontrols.all()
        ]

        # add projects to group
        ret['projects'] = []
        self.projects = {}

        anonymous_user = get_user_model().get_anonymous()

        for g3wProjectApp in settings.G3WADMIN_PROJECT_APPS:
            Project = apps.get_app_config(g3wProjectApp).get_model('project')
            projects = get_objects_for_user(self.request.user, '{}.view_project'.format(g3wProjectApp), Project) \
                .filter(group=instance)
            projects_anonymous = get_objects_for_user(
                anonymous_user, '{}.view_project'.format(g3wProjectApp),
                Project).filter(group=instance)
            projects = list(set(projects) | set(projects_anonymous))
            for project in projects:
                self.projects[g3wProjectApp + '-' + str(project.id)] = project

                # project thumbnail
                project_thumb = project.thumbnail.name if bool(project.thumbnail.name) \
                    else '{}client/images/FakeProjectThumb.png'.format(settings.STATIC_URL)
                ret['projects'].append({
                    'id':
                    project.id,
                    'title':
                    project.title,
                    'description':
                    project.description,
                    'thumbnail':
                    project_thumb,
                    'type':
                    g3wProjectApp,
                    'gid':
                    "{}:{}".format(g3wProjectApp, project.id)
                })

        # baselayers
        ret['baselayers'] = []
        baselayers = instance.baselayers.all()
        for baselayer in baselayers:
            ret['baselayers'].append(BaseLayerSerializer(baselayer).data)

        # add initproject and overviewproject
        ret['initproject'] = "{}:{}".format(self.projectType, self.projectId)

        # add overviewproject is present
        overviewproject = instance.project_panoramic.all()
        if overviewproject:
            overviewproject = overviewproject[0]
            ret['overviewproject'] = {
                'id':
                int(overviewproject.project_id),
                'type':
                overviewproject.project_type,
                'gid':
                "{}:{}".format(overviewproject.project_type,
                               overviewproject.project_id)
            }
        else:
            ret['overviewproject'] = None

        ret['plugins'] = {}

        # plugins/module data
        dataPlugins = initconfig_plugin_start.send(
            sender=self, project=self.projectId, projectType=self.projectType)
        for dataPlugin in dataPlugins:
            if dataPlugin[1]:
                ret['plugins'] = copy(ret['plugins'])
                ret['plugins'].update(dataPlugin[1])
        return ret
예제 #4
0
    def to_representation(self, instance):
        ret = super(GroupSerializer, self).to_representation(instance)

        # add header_logo
        # before check macrogroups and groups number also if is equal to 1 use it

        try:
            macrogroup = instance.macrogroups.get(use_logo_client=True)
            ret['header_logo_img'] = macrogroup.logo_img.name
        except:
            ret['header_logo_img'] = instance.header_logo_img.name

        try:
            macrogroup = instance.macrogroups.get(use_title_client=True)
            ret['name'] = macrogroup.title
        except:
            # change groupData name with title for i18n app
            ret['name'] = instance.title

        # add crs:
        crs = QgsCoordinateReferenceSystem(f'EPSG:{self.instance.srid.srid}')

        ret['crs'] = {
            'epsg': crs.postgisSrid(),
            'proj4': crs.toProj4(),
            'geographic': crs.isGeographic(),
            'axisinverted': crs.hasAxisInverted()
        }

        # map controls
        ret['mapcontrols'] = [
            mapcontrol.name for mapcontrol in instance.mapcontrols.all()
        ]

        # add projects to group
        ret['projects'] = []
        self.projects = {}

        anonymous_user = get_user_model().get_anonymous()

        for g3wProjectApp in settings.G3WADMIN_PROJECT_APPS:
            Project = apps.get_app_config(g3wProjectApp).get_model('project')
            projects = get_objects_for_user(self.request.user, '{}.view_project'.format(g3wProjectApp), Project) \
                .filter(group=instance)
            projects_anonymous = get_objects_for_user(
                anonymous_user, '{}.view_project'.format(g3wProjectApp),
                Project).filter(group=instance)
            projects = list(set(projects) | set(projects_anonymous))
            print(projects)
            for project in projects:
                self.projects[g3wProjectApp + '-' + str(project.id)] = project

                if project.pk == int(
                        self.projectId) and g3wProjectApp == self.projectType:
                    self.project = project

                # project thumbnail
                project_thumb = project.thumbnail.name if bool(project.thumbnail.name) \
                    else '{}client/images/FakeProjectThumb.png'.format(settings.STATIC_URL)
                ret['projects'].append({
                    'id':
                    project.id,
                    'title':
                    project.title,
                    'description':
                    project.description,
                    'thumbnail':
                    project_thumb,
                    'type':
                    g3wProjectApp,
                    'gid':
                    "{}:{}".format(g3wProjectApp, project.id),
                    'modified':
                    project.modified.timestamp() if hasattr(
                        project, 'modified') else 0
                })

        # baselayers
        ret['baselayers'] = []
        baselayers = instance.baselayers.all().order_by('order')
        for baselayer in baselayers:
            ret['baselayers'].append(BaseLayerSerializer(baselayer).data)

        # add vendorkeys if it is set into settings
        if settings.VENDOR_KEYS:
            ret['vendorkeys'] = settings.VENDOR_KEYS

        # add initproject and overviewproject
        ret['initproject'] = "{}:{}".format(self.projectType, self.projectId)

        # add overviewproject is present
        overviewproject = instance.project_panoramic.all()
        if overviewproject:
            overviewproject = overviewproject[0]
            ret['overviewproject'] = {
                'id':
                int(overviewproject.project_id),
                'type':
                overviewproject.project_type,
                'gid':
                "{}:{}".format(overviewproject.project_type,
                               overviewproject.project_id)
            }
        else:
            ret['overviewproject'] = None

        ret['plugins'] = {}

        # plugins/module data
        dataPlugins = initconfig_plugin_start.send(
            sender=self, project=self.projectId, projectType=self.projectType)
        for dataPlugin in dataPlugins:
            if dataPlugin[1]:
                ret['plugins'] = copy(ret['plugins'])
                ret['plugins'].update(dataPlugin[1])

        # powerd_by
        ret['powered_by'] = settings.G3WSUITE_POWERD_BY

        # header customs links
        header_custom_links = getattr(settings,
                                      'G3W_CLIENT_HEADER_CUSTOM_LINKS', None)
        ret['header_custom_links'] = []
        if header_custom_links:

            # check for possible callback
            for head_link in header_custom_links:
                if callable(head_link):
                    ret['header_custom_links'].append(head_link(self.request))
                else:
                    ret['header_custom_links'].append(head_link)

        # custom layout
        ret['layout'] = {}

        # add legend settings if set to layout
        layout_legend = getattr(settings, 'G3W_CLIENT_LEGEND', None)
        if layout_legend:
            ret['layout']['legend'] = layout_legend

        # Check if G3W_CLIENT_LEGEND['layertitle'] set it tu false
        if self.project.legend_position == 'toc':
            if layout_legend:
                ret['layout']['legend']['layertitle'] = False
            else:
                ret['layout']['legend'] = {'layertitle': False}

        # add legend settings if set to layout
        layout_right_panel = getattr(settings, 'G3W_CLIENT_RIGHT_PANEL', None)
        if layout_right_panel:
            ret['layout']['rightpanel'] = layout_right_panel

        return ret