def __init__(self, user, list_current_workspace=[], is_administration=False, show_global_workspace=False): self.WORKSPACES_OPTIONS = [] self.WORKSPACES_OPTIONS.append(('', '-----------')) # We retrieve all workspaces with write access, or all workspaces if administration if is_administration: all_workspaces = workspace_api.get_all() else: all_workspaces = list(workspace_api.get_all_workspaces_with_write_access_by_user(user)) if show_global_workspace: workspace_global = workspace_api.get_global_workspace() if workspace_global not in all_workspaces: all_workspaces.append(workspace_global) if len(all_workspaces) == 0: raise DoesNotExist("You don't have access to any workspaces with sufficient rights to assign a " + get_data_label() + ".") # We sort by title, case insensitive sort_workspaces = sorted(all_workspaces, key=lambda s: s.title.lower()) # We add them for workspace in sort_workspaces: is_workspace_global = workspace_api.is_workspace_global(workspace) if (list_current_workspace == [] or\ (len(list_current_workspace) > 0 and workspace not in list_current_workspace)) \ and ((show_global_workspace and is_workspace_global) or not is_workspace_global): self.WORKSPACES_OPTIONS.append((workspace.id, workspace.title + " (" + ("GLOBAL" if is_workspace_global else user_api.get_user_by_id(workspace.owner).username) + ")")) super(ChangeWorkspaceForm, self).__init__() self.fields['workspaces'].choices = [] self.fields['workspaces'].choices = self.WORKSPACES_OPTIONS
def test_is_workspace_global_false(self): # Context workspace = WorkspaceFixtures.create_workspace('1', TITLE_1) # Act result = workspace_api.is_workspace_global(workspace) # Assert self.assertFalse(result)
def test_is_workspace_global_true(self): # Context workspace = WorkspaceFixtures.create_global_workspace(TITLE_1) # Act result = workspace_api.is_workspace_global(workspace) # Assert self.assertTrue(result)
def get(self, request, *args, **kwargs): try: workspace_id = kwargs["workspace_id"] workspace = workspace_api.get_by_id(workspace_id) except DoesNotExist as e: return HttpResponseBadRequest("The workspace does not exist.") except: return HttpResponseBadRequest("Something wrong happened.") if workspace.owner != str(request.user.id) and not self.administration: return HttpResponseForbidden( "Only the workspace owner can edit the rights.") try: # Users users_read_workspace = workspace_api.get_list_user_can_read_workspace( workspace, request.user) users_write_workspace = workspace_api.get_list_user_can_write_workspace( workspace, request.user) users_access_workspace = list( set(users_read_workspace + users_write_workspace)) detailed_users = [] for user in users_access_workspace: if str(user.id) != workspace.owner: detailed_users.append({ "object_id": user.id, "object_name": user.username, "can_read": user in users_read_workspace, "can_write": user in users_write_workspace, }) except: detailed_users = [] try: # Groups groups_read_workspace = workspace_api.get_list_group_can_read_workspace( workspace, request.user) groups_write_workspace = workspace_api.get_list_group_can_write_workspace( workspace, request.user) groups_access_workspace = list( set(groups_read_workspace + groups_write_workspace)) group_utils.remove_list_object_from_list( groups_access_workspace, [ group_api.get_anonymous_group(), group_api.get_default_group() ], ) detailed_groups = [] for group in groups_access_workspace: detailed_groups.append({ "object_id": group.id, "object_name": group.name, "can_read": group in groups_read_workspace, "can_write": group in groups_write_workspace, }) except: detailed_groups = [] context = { "workspace": workspace, "user_data": detailed_users, "group_data": detailed_groups, "template": "core_main_app/user/workspaces/list/edit_rights_table.html", "action_read": "action_read", "action_write": "action_write", } if workspace_api.is_workspace_public(workspace): context.update({"is_public": True}) if workspace_api.is_workspace_global(workspace): context.update({"is_global": True}) assets = { "css": [ "core_main_app/libs/datatables/1.10.13/css/jquery.dataTables.css", "core_main_app/libs/fSelect/css/fSelect.css", "core_main_app/common/css/switch.css", ], "js": [ { "path": "core_main_app/libs/datatables/1.10.13/js/jquery.dataTables.js", "is_raw": True, }, { "path": "core_main_app/libs/fSelect/js/fSelect.js", "is_raw": False }, { "path": "core_main_app/common/js/backtoprevious.js", "is_raw": True }, { "path": "core_main_app/user/js/workspaces/tables.js", "is_raw": True }, { "path": "core_main_app/user/js/workspaces/add_user.js", "is_raw": False, }, { "path": "core_main_app/user/js/workspaces/list/modals/switch_right.js", "is_raw": False, }, { "path": "core_main_app/user/js/workspaces/list/modals/remove_rights.js", "is_raw": False, }, { "path": "core_main_app/user/js/workspaces/add_group.js", "is_raw": False, }, { "path": "core_main_app/user/js/workspaces/init.js", "is_raw": False }, ], } modals = [ "core_main_app/user/workspaces/list/modals/add_user.html", "core_main_app/user/workspaces/list/modals/switch_right.html", "core_main_app/user/workspaces/list/modals/remove_rights.html", "core_main_app/user/workspaces/list/modals/add_group.html", ] return self.common_render(request, self.template, context=context, assets=assets, modals=modals)
def get(self, request, *args, **kwargs): """ Method GET Args: request: args: kwargs: Returns: """ if self.administration: user_workspaces = workspace_api.get_all() else: # Get the workspace the user can read user_workspace_read = list( workspace_api.get_all_workspaces_with_read_access_by_user( request.user)) # Get the workspace the user can write user_workspace_write = list( workspace_api.get_all_workspaces_with_write_access_by_user( request.user)) # Get the merged list without doublons user_workspaces = user_workspace_read + list( set(user_workspace_write) - set(user_workspace_read)) detailed_user_workspaces = [] for user_workspace in user_workspaces: detailed_user_workspaces.append({ 'user': user_api.get_user_by_id(user_workspace.owner).username if not workspace_api.is_workspace_global(user_workspace) else "GLOBAL", 'is_owner': self.administration or user_workspace.owner == str(request.user.id), 'name': user_workspace.title, 'workspace': user_workspace, 'can_read': self.administration or user_workspace in user_workspace_read, 'can_write': self.administration or user_workspace in user_workspace_write, 'is_public': workspace_api.is_workspace_public(user_workspace), 'is_global': workspace_api.is_workspace_global(user_workspace) }) context = { 'number_total': len(user_workspaces), 'workspace_form': WorkspaceForm(), 'user_data': detailed_user_workspaces, 'document': dashboard_constants.FUNCTIONAL_OBJECT_ENUM.WORKSPACE, 'template': dashboard_constants.DASHBOARD_WORKSPACES_TEMPLATE_TABLE, 'create_workspace': not self.administration, 'can_set_public': settings.CAN_SET_WORKSPACE_PUBLIC } modals = [dashboard_constants.MODALS_COMMON_DELETE] assets = { "css": copy.deepcopy(dashboard_constants.CSS_COMMON), "js": [ { "path": dashboard_constants.JS_USER_SELECTED_ELEMENT, "is_raw": True }, { "path": dashboard_constants.JS_COMMON_FUNCTION_DELETE, "is_raw": False }, { "path": 'core_dashboard_common_app/user/js/init.raw.js', "is_raw": True }, ] } if not self.administration: modals.append( "core_main_app/user/workspaces/list/create_workspace.html") assets['js'].append({ "path": 'core_main_app/user/js/workspaces/create_workspace.js', "is_raw": False }) if settings.CAN_SET_WORKSPACE_PUBLIC: modals.append( "core_main_app/user/workspaces/list/modals/set_public.html") assets['js'].append({ "path": 'core_main_app/user/js/workspaces/list/modals/set_public.js', "is_raw": False }) modals.append( "core_main_app/user/workspaces/list/modals/set_private.html") assets['js'].append({ "path": 'core_main_app/user/js/workspaces/list/modals/set_private.js', "is_raw": False }) return self.common_render(request, self.template, context=context, assets=assets, modals=modals)
def get(self, request, *args, **kwargs): """Method GET Args: request: args: kwargs: Returns: """ if self.administration: user_workspaces = workspace_api.get_all() user_workspaces_count = user_workspaces.count() else: # Get the workspace the user can read user_workspace_read = list( workspace_api.get_all_workspaces_with_read_access_by_user(request.user) ) # Get the workspace the user can write user_workspace_write = list( workspace_api.get_all_workspaces_with_write_access_by_user(request.user) ) # Get the merged list without doublons user_workspaces = user_workspace_read + list( set(user_workspace_write) - set(user_workspace_read) ) user_workspaces_count = len(user_workspaces) detailed_user_workspaces = [] for user_workspace in user_workspaces: try: username = ( user_api.get_user_by_id(user_workspace.owner).username if not workspace_api.is_workspace_global(user_workspace) else "GLOBAL" ) except ObjectDoesNotExist: username = "******" detailed_user_workspaces.append( { "user": username, "is_owner": self.administration or user_workspace.owner == str(request.user.id), "name": user_workspace.title, "workspace": user_workspace, "can_read": self.administration or user_workspace in user_workspace_read, "can_write": self.administration or user_workspace in user_workspace_write, "is_public": workspace_api.is_workspace_public(user_workspace), "is_global": workspace_api.is_workspace_global(user_workspace), } ) context = { "number_total": user_workspaces_count, "workspace_form": WorkspaceForm(), "user_data": detailed_user_workspaces, "document": dashboard_constants.FUNCTIONAL_OBJECT_ENUM.WORKSPACE.value, "template": dashboard_constants.DASHBOARD_WORKSPACES_TEMPLATE_TABLE, "create_workspace": not self.administration, "can_set_public": settings.CAN_SET_WORKSPACE_PUBLIC, } modals = [dashboard_constants.MODALS_COMMON_DELETE] assets = { "css": copy.deepcopy(dashboard_constants.CSS_COMMON), "js": [ {"path": dashboard_constants.JS_USER_SELECTED_ELEMENT, "is_raw": True}, { "path": dashboard_constants.JS_COMMON_FUNCTION_DELETE, "is_raw": False, }, { "path": "core_dashboard_common_app/user/js/init.raw.js", "is_raw": True, }, ], } if not self.administration: modals.append("core_main_app/user/workspaces/list/create_workspace.html") assets["js"].append( { "path": "core_main_app/user/js/workspaces/create_workspace.js", "is_raw": False, } ) if settings.CAN_SET_WORKSPACE_PUBLIC: modals.append("core_main_app/user/workspaces/list/modals/set_public.html") assets["js"].append( { "path": "core_main_app/user/js/workspaces/list/modals/set_public.js", "is_raw": False, } ) modals.append("core_main_app/user/workspaces/list/modals/set_private.html") assets["js"].append( { "path": "core_main_app/user/js/workspaces/list/modals/set_private.js", "is_raw": False, } ) return self.common_render( request, self.template, context=context, assets=assets, modals=modals )