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
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
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
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)
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