예제 #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
        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
예제 #3
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
예제 #4
0
def setup_testing_user(cls):
    """
    Setup testing users and user groups
    :param cls: Testcase class object
    :return: None
    """

    AuthGroup = apps.get_app_config('auth').get_model('Group')
    Permission = apps.get_app_config('auth').get_model('Permission')
    ContentType = apps.get_app_config('contenttypes').get_model('ContentType')
    Group = apps.get_app_config('core').get_model('Group')

    # set anonymous users
    cls.anonymoususer = get_user_model().get_anonymous()

    # add base group to g3w-admin database
    cls.main_roles = {}
    for gname in (G3W_VIEWER2, G3W_VIEWER1, G3W_EDITOR2, G3W_EDITOR1):
        agroup, created = AuthGroup.objects.get_or_create(name=gname)
        cls.main_roles[gname] = agroup
        if not created:
            pass

    # give permissions to Editor Level 1
    editorPermission = cls.main_roles[G3W_EDITOR1].permissions.all()
    permissionsToAdd = (
        Permission.objects.get(codename='add_user'),
        Permission.objects.get(codename='add_group', content_type=ContentType.objects.get_for_model(AuthGroup)),

    )
    for perm in permissionsToAdd:
        if perm not in editorPermission:
            cls.main_roles[G3W_EDITOR1].permissions.add(perm)

    # Create Admin level 1
    try:
        test_user1 = User.objects.get(username='******')
    except:
        test_user1 = User.objects.create_superuser(username='******', password='******', email='')
        test_user1.save()
        Userbackend(user=test_user1, backend=USER_BACKEND_DEFAULT).save()

    setattr(cls, 'test_user1', test_user1)

    # alias for test_user1 -> test_admin1
    setattr(cls, 'test_admin1', test_user1)

    # Create Admin level 2
    try:
        test_user2 = User.objects.get(username='******')
    except:
        test_user2 = User.objects.create_user(username='******', password='******')
        test_user2.is_superuser = True
        test_user2.save()
        Userbackend(user=test_user2, backend=USER_BACKEND_DEFAULT).save()

    setattr(cls, 'test_user2', test_user2)

    # alias for test_user2 -> test_admin2
    setattr(cls, 'test_admin2', test_user2)

    # create editor and viewers, and editor and viewer group
    # like create by admin user
    # =====================================================
    for euser in EU1:
        user = User.objects.create_user(username=euser, password=euser)
        user.save()
        user.groups.add(cls.main_roles[G3W_EDITOR1])
        Userbackend(user=user, backend=USER_BACKEND_DEFAULT).save()
        setattr(cls, 'test_{}'.format(euser.replace('.', '_')), user)

    for euser in EU2:
        user = User.objects.create_user(username=euser, password=euser)
        user.save()
        user.groups.add(cls.main_roles[G3W_EDITOR2])
        Userbackend(user=user, backend=USER_BACKEND_DEFAULT).save()
        setattr(cls, 'test_{}'.format(euser.replace('.', '_')), user)

    for euser in VU1:
        user = User.objects.create_user(username=euser, password=euser)
        user.save()
        user.groups.add(cls.main_roles[G3W_VIEWER1])
        Userbackend(user=user, backend=USER_BACKEND_DEFAULT).save()
        setattr(cls, 'test_{}'.format(euser.replace('.', '_')), user)

    # create user groups
    for ugroup in GU:
        ug, created = AuthGroup.objects.get_or_create(name=ugroup[0])
        if created:
            ug.role = ugroup[1]
            ug.save()
            GroupRole(group=ug, role=ugroup[1]).save()
        setattr(cls, 'test_{}'.format(ugroup[0].replace('-', '_').lower()), ug)

    # Add users editor and viewers to user groups
    # editor2 and editor 2.3 -> GU-EDITOR1
    # editor2.1 -> GU-EDITOR2
    # viewer1 adn viewer1.2 -> GU-VIEWER1
    # viewer1.3 -> GU-VIEWER2
    cls.test_editor2.groups.add(cls.test_gu_editor1)
    cls.test_editor2_3.groups.add(cls.test_gu_editor1)
    cls.test_editor2_2.groups.add(cls.test_gu_editor2)
    cls.test_viewer1.groups.add(cls.test_gu_viewer1)
    cls.test_viewer1_2.groups.add(cls.test_gu_viewer1)
    cls.test_viewer1_3.groups.add(cls.test_gu_viewer2)
예제 #5
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