Exemplo n.º 1
0
    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
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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
        )