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") ] }})
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)})
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) })
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, ())})
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)})