Ejemplo n.º 1
0
    def handle_get_folder(self, data):
        shop = get_shop(self.request)
        try:
            folder_id = int(data.get("id", 0))
            if folder_id:
                folder = _get_folder_query(shop).get(pk=folder_id)
                subfolders = folder.get_children().filter(_get_folder_query_filter(shop))
                files = _get_file_query(shop, folder)
            else:
                folder = None
                subfolders = _get_folder_query(shop).filter(parent=None)
                files = _get_file_query(shop).filter(folder=None)
        except ObjectDoesNotExist:
            return JsonResponse({
                "folder": None,
                "error": "Error! Folder does not exist."
            })

        if self.filter == "images":
            files = files.instance_of(Image)

        return JsonResponse({"folder": {
            "id": folder.id if folder else 0,
            "name": get_folder_name(folder),
            "files": [filer_file_to_json_dict(file) for file in files if file.is_public],
            "folders": [
                # Explicitly pass empty list of children to avoid recursion
                filer_folder_to_json_dict(subfolder, children=())
                for subfolder in subfolders.order_by("name")
            ]
        }})
Ejemplo n.º 2
0
    def _create_folder(self, name, parent, shop):
        folder = Folder.objects.create(name=name)
        if parent:
            folder.move_to(parent, "last-child")
            folder.save()

        ensure_media_folder(shop, folder)
        return JsonResponse({"success": True, "folder": filer_folder_to_json_dict(folder, (), self.user)})
Ejemplo n.º 3
0
    def handle_get_folders(self, data):
        shop = get_shop(self.request)

        users_owned_folders = Folder.objects.filter(
            media_folder__owners=self.user)
        root_folders = None

        # If the user has a root folder and not permission to view all folders
        if len(users_owned_folders) > 0 and not has_permission(
                self.user, "media.view-all"):
            all_accessed_folders = list(
                Folder._tree_manager.filter(
                    _get_folder_query_filter(shop, self.user)).order_by(
                        users_owned_folders.first()._mptt_meta.level_attr))
            get_media_folder = cached_load(
                "SHUUP_GET_MEDIA_FOLDER_FROM_FOLDER")

            # We will need to change the tree ordering of folders that the user owns,
            # so the owning folders shows up under the root folder.
            # This is because if admin gives view access to a folder that has a lower level (closer to the root),
            # then the folder the user owns. It would be stacked under the folder that the admin has given access to,
            # insted of under the root folder.

            ordered_folders = []

            for index, folder in enumerate(all_accessed_folders):
                media_folder = get_media_folder(folder)
                if self.user in media_folder.owners.all():
                    setattr(all_accessed_folders[index],
                            folder._mptt_meta.level_attr, 0)
                    ordered_folders.insert(0, all_accessed_folders[index])
                else:
                    in_path = False
                    for folder_on_path in folder.logical_path:
                        print(folder_on_path)
                        if folder_on_path in all_accessed_folders:
                            ordered_folders.append(folder)
                            in_path = True
                            break

                    if not in_path:
                        setattr(folder, folder._mptt_meta.level_attr, 0)
                        ordered_folders.insert(0, folder)

            root_folders = get_cached_trees(ordered_folders)
        else:
            # Everything is shown under the fake root folder that is actually not a real folder
            root_folders = get_cached_trees(
                Folder._tree_manager.filter(
                    _get_folder_query_filter(shop, self.user)))

        return JsonResponse({
            "rootFolder":
            filer_folder_to_json_dict(None, root_folders, self.user)
        })
Ejemplo n.º 4
0
    def handle_post_new_folder(self, data):
        shop = get_shop(self.request)
        parent_id = int(data.get("parent", 0))
        if parent_id > 0:
            parent = _get_folder_query(shop).get(pk=parent_id)
        else:
            parent = None

        name = data["name"]
        folder = Folder.objects.create(name=name)
        if parent:
            folder.move_to(parent, "last-child")
            folder.save()

        ensure_media_folder(shop, folder)
        return JsonResponse({"success": True, "folder": filer_folder_to_json_dict(folder, ())})
Ejemplo n.º 5
0
 def handle_get_folders(self, data):
     shop = get_shop(self.request)
     root_folders = get_cached_trees(
         Folder._tree_manager.filter(_get_folder_query_filter(shop)))
     return JsonResponse(
         {"rootFolder": filer_folder_to_json_dict(None, root_folders)})