def directory_listing(self, request, folder_id=None, viewtype=None): clipboard = tools.get_user_clipboard(request.user) if viewtype == 'images_with_missing_data': folder = ImagesWithMissingData() elif viewtype == 'unfiled_images': folder = UnfiledImages() elif folder_id == None: folder = FolderRoot() else: try: folder = Folder.objects.get(id=folder_id) except Folder.DoesNotExist: raise Http404 # search def filter_folder(qs, terms=[]): for term in terms: qs = qs.filter(Q(name__icontains=term) | Q(owner__username__icontains=term) | Q(owner__first_name__icontains=term) | Q(owner__last_name__icontains=term) ) return qs def filter_file(qs, terms=[]): for term in terms: qs = qs.filter( Q(name__icontains=term) | Q(original_filename__icontains=term ) | Q(owner__username__icontains=term) | Q(owner__first_name__icontains=term) | Q(owner__last_name__icontains=term) ) return qs q = request.GET.get('q', None) if q: search_terms = q.split(" ") else: search_terms = [] limit_search_to_folder = request.GET.get('limit_search_to_folder', False) in (True, 'on') if len(search_terms)>0: if folder and limit_search_to_folder and not folder.is_root: folder_qs = folder.get_descendants() file_qs = File.objects.filter(folder__in=folder.get_descendants()) else: folder_qs = Folder.objects.all() file_qs = File.objects.all() folder_qs = filter_folder(folder_qs, search_terms) file_qs = filter_file(file_qs, search_terms) show_result_count = True else: folder_qs = folder.children.all() file_qs = folder.files.all() show_result_count = False folder_qs = folder_qs.order_by('name') file_qs = file_qs.order_by('name') folder_children = [] folder_files = [] if folder.is_root: folder_children += folder.virtual_folders for f in folder_qs: f.perms = userperms_for_request(f, request) if hasattr(f, 'has_read_permission'): if f.has_read_permission(request): #print "%s has read permission for %s" % (request.user, f) folder_children.append(f) else: pass#print "%s has NO read permission for %s" % (request.user, f) else: folder_children.append(f) for f in file_qs: f.perms = userperms_for_request(f, request) if hasattr(f, 'has_read_permission'): if f.has_read_permission(request): #print "%s has read permission for %s" % (request.user, f) folder_files.append(f) else: pass#print "%s has NO read permission for %s" % (request.user, f) else: folder_files.append(f) try: permissions = { 'has_edit_permission': folder.has_edit_permission(request), 'has_read_permission': folder.has_read_permission(request), 'has_add_children_permission': folder.has_add_children_permission(request), } except: permissions = {} #folder_children = folder_children.sort(cmp=lambda x,y: cmp(x.name.lower(), y.name.lower())) folder_files.sort(cmp=lambda x, y: cmp(x.label.lower(), y.label.lower())) return render_to_response('admin/filer/folder/directory_listing.html', { 'folder':folder, 'folder_children':folder_children, 'folder_files':folder_files, 'permissions': permissions, 'permstest': userperms_for_request(folder, request), 'current_url': request.path, 'title': u'Directory listing for %s' % folder.name, 'search_string': ' '.join(search_terms), 'show_result_count': show_result_count, 'limit_search_to_folder': limit_search_to_folder, 'is_popup': popup_status(request), 'select_folder': selectfolder_status(request), 'root_path': "/%s" % admin.site.root_path, # needed in the admin/base.html template for logout links and stuff }, context_instance=RequestContext(request))
def directory_listing(self, request, folder_id=None, viewtype=None): clipboard = tools.get_user_clipboard(request.user) if viewtype == "images_with_missing_data": folder = ImagesWithMissingData() elif viewtype == "unfiled_images": folder = UnfiledImages() elif folder_id == None: folder = FolderRoot() else: try: folder = Folder.objects.get(id=folder_id) except Folder.DoesNotExist: raise Http404 # Check actions to see if any are available on this changelist actions = self.get_actions(request) # Remove action checkboxes if there aren't any actions available. list_display = list(self.list_display) if not actions: try: list_display.remove("action_checkbox") except ValueError: pass # search def filter_folder(qs, terms=[]): for term in terms: qs = qs.filter( Q(name__icontains=term) | Q(owner__username__icontains=term) | Q(owner__first_name__icontains=term) | Q(owner__last_name__icontains=term) ) return qs def filter_file(qs, terms=[]): for term in terms: qs = qs.filter( Q(name__icontains=term) | Q(description__icontains=term) | Q(original_filename__icontains=term) | Q(owner__username__icontains=term) | Q(owner__first_name__icontains=term) | Q(owner__last_name__icontains=term) ) return qs q = request.GET.get("q", None) if q: search_terms = urllib.unquote_plus(q).split(" ") else: search_terms = [] q = "" limit_search_to_folder = request.GET.get("limit_search_to_folder", False) in (True, "on") if len(search_terms) > 0: if folder and limit_search_to_folder and not folder.is_root: folder_qs = folder.get_descendants() file_qs = File.objects.filter(folder__in=folder.get_descendants()) else: folder_qs = Folder.objects.all() file_qs = File.objects.all() folder_qs = filter_folder(folder_qs, search_terms) file_qs = filter_file(file_qs, search_terms) show_result_count = True else: folder_qs = folder.children.all() file_qs = folder.files.all() show_result_count = False folder_qs = folder_qs.order_by("name") file_qs = file_qs.order_by("name") folder_children = [] folder_files = [] if folder.is_root: folder_children += folder.virtual_folders for f in folder_qs: f.perms = userperms_for_request(f, request) if hasattr(f, "has_read_permission"): if f.has_read_permission(request): folder_children.append(f) else: pass else: folder_children.append(f) for f in file_qs: f.perms = userperms_for_request(f, request) if hasattr(f, "has_read_permission"): if f.has_read_permission(request): folder_files.append(f) else: pass else: folder_files.append(f) try: permissions = { "has_edit_permission": folder.has_edit_permission(request), "has_read_permission": folder.has_read_permission(request), "has_add_children_permission": folder.has_add_children_permission(request), } except: permissions = {} folder_files.sort() items = folder_children + folder_files paginator = Paginator(items, FILER_PAGINATE_BY) # Make sure page request is an int. If not, deliver first page. try: page = int(request.GET.get("page", "1")) except ValueError: page = 1 # Are we moving to clipboard? if request.method == "POST" and "_save" not in request.POST: for f in folder_files: if "move-to-clipboard-%d" % (f.id,) in request.POST: clipboard = tools.get_user_clipboard(request.user) if f.has_edit_permission(request): tools.move_file_to_clipboard([f], clipboard) return HttpResponseRedirect(request.get_full_path()) else: raise PermissionDenied selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME) # Actions with no confirmation if actions and request.method == "POST" and "index" in request.POST and "_save" not in request.POST: if selected: response = self.response_action(request, files_queryset=file_qs, folders_queryset=folder_qs) if response: return response else: msg = _("Items must be selected in order to perform " "actions on them. No items have been changed.") self.message_user(request, msg) # Actions with confirmation if ( actions and request.method == "POST" and helpers.ACTION_CHECKBOX_NAME in request.POST and "index" not in request.POST and "_save" not in request.POST ): if selected: response = self.response_action(request, files_queryset=file_qs, folders_queryset=folder_qs) if response: return response # Build the action form and populate it with available actions. if actions: action_form = self.action_form(auto_id=None) action_form.fields["action"].choices = self.get_action_choices(request) else: action_form = None selection_note_all = ungettext("%(total_count)s selected", "All %(total_count)s selected", paginator.count) # If page request (9999) is out of range, deliver last page of results. try: paginated_items = paginator.page(page) except (EmptyPage, InvalidPage): paginated_items = paginator.page(paginator.num_pages) return render_to_response( "admin/filer/folder/directory_listing.html", { "folder": folder, "clipboard_files": File.objects.filter( in_clipboards__clipboarditem__clipboard__user=request.user ).distinct(), "paginator": paginator, "paginated_items": paginated_items, "permissions": permissions, "permstest": userperms_for_request(folder, request), "current_url": request.path, "title": u"Directory listing for %s" % folder.name, "search_string": " ".join(search_terms), "q": urllib.quote_plus(q), "show_result_count": show_result_count, "limit_search_to_folder": limit_search_to_folder, "is_popup": popup_status(request), "select_folder": selectfolder_status(request), # needed in the admin/base.html template for logout links "root_path": reverse("admin:index"), "action_form": action_form, "actions_on_top": self.actions_on_top, "actions_on_bottom": self.actions_on_bottom, "actions_selection_counter": self.actions_selection_counter, "selection_note": _("0 of %(cnt)s selected") % {"cnt": len(paginated_items.object_list)}, "selection_note_all": selection_note_all % {"total_count": paginator.count}, "media": self.media, "enable_permissions": settings.FILER_ENABLE_PERMISSIONS, }, context_instance=RequestContext(request), )
def directory_listing(self, request, folder_id=None, viewtype=None): clipboard = tools.get_user_clipboard(request.user) if viewtype == 'images_with_missing_data': folder = ImagesWithMissingData() elif viewtype == 'unfiled_images': folder = UnfiledImages() elif folder_id == None: folder = FolderRoot() else: try: folder = Folder.objects.get(id=folder_id) except Folder.DoesNotExist: raise Http404 # Check actions to see if any are available on this changelist actions = self.get_actions(request) # Remove action checkboxes if there aren't any actions available. list_display = list(self.list_display) if not actions: try: list_display.remove('action_checkbox') except ValueError: pass # search def filter_folder(qs, terms=[]): for term in terms: qs = qs.filter(Q(name__icontains=term) | \ Q(owner__username__icontains=term) | \ Q(owner__first_name__icontains=term) | \ Q(owner__last_name__icontains=term)) return qs def filter_file(qs, terms=[]): for term in terms: qs = qs.filter(Q(name__icontains=term) | \ Q(description__icontains=term) | \ Q(original_filename__icontains=term) | \ Q(owner__username__icontains=term) | \ Q(owner__first_name__icontains=term) | \ Q(owner__last_name__icontains=term)) return qs q = request.GET.get('q', None) if q: search_terms = urllib.unquote_plus(q).split(" ") else: search_terms = [] q = '' limit_search_to_folder = request.GET.get('limit_search_to_folder', False) in (True, 'on') if len(search_terms) > 0: if folder and limit_search_to_folder and not folder.is_root: folder_qs = folder.get_descendants() file_qs = File.objects.filter( folder__in=folder.get_descendants()) else: folder_qs = Folder.objects.all() file_qs = File.objects.all() folder_qs = filter_folder(folder_qs, search_terms) file_qs = filter_file(file_qs, search_terms) show_result_count = True else: folder_qs = folder.children.all() file_qs = folder.files.all() show_result_count = False folder_qs = folder_qs.order_by('name') file_qs = file_qs.order_by('name') folder_children = [] folder_files = [] if folder.is_root: folder_children += folder.virtual_folders for f in folder_qs: f.perms = userperms_for_request(f, request) if hasattr(f, 'has_read_permission'): if f.has_read_permission(request): folder_children.append(f) else: pass else: folder_children.append(f) for f in file_qs: f.perms = userperms_for_request(f, request) if hasattr(f, 'has_read_permission'): if f.has_read_permission(request): folder_files.append(f) else: pass else: folder_files.append(f) try: permissions = { 'has_edit_permission': folder.has_edit_permission(request), 'has_read_permission': folder.has_read_permission(request), 'has_add_children_permission': \ folder.has_add_children_permission(request), } except: permissions = {} folder_files.sort() items = folder_children + folder_files paginator = Paginator(items, FILER_PAGINATE_BY) # Make sure page request is an int. If not, deliver first page. try: page = int(request.GET.get('page', '1')) except ValueError: page = 1 # Are we moving to clipboard? if request.method == 'POST' and '_save' not in request.POST: for f in folder_files: if "move-to-clipboard-%d" % (f.id,) in request.POST: clipboard = tools.get_user_clipboard(request.user) if f.has_edit_permission(request): tools.move_file_to_clipboard([f], clipboard) return HttpResponseRedirect(request.get_full_path()) else: raise PermissionDenied selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME) # Actions with no confirmation if (actions and request.method == 'POST' and 'index' in request.POST and '_save' not in request.POST): if selected: response = self.response_action(request, files_queryset=file_qs, folders_queryset=folder_qs) if response: return response else: msg = _("Items must be selected in order to perform " "actions on them. No items have been changed.") self.message_user(request, msg) # Actions with confirmation if (actions and request.method == 'POST' and helpers.ACTION_CHECKBOX_NAME in request.POST and 'index' not in request.POST and '_save' not in request.POST): if selected: response = self.response_action(request, files_queryset=file_qs, folders_queryset=folder_qs) if response: return response # Build the action form and populate it with available actions. if actions: action_form = self.action_form(auto_id=None) action_form.fields['action'].choices = self.get_action_choices(request) else: action_form = None selection_note_all = ungettext('%(total_count)s selected', 'All %(total_count)s selected', paginator.count) # If page request (9999) is out of range, deliver last page of results. try: paginated_items = paginator.page(page) except (EmptyPage, InvalidPage): paginated_items = paginator.page(paginator.num_pages) return render_to_response( 'admin/filer/folder/directory_listing.html', { 'folder': folder, 'clipboard_files': File.objects.filter( in_clipboards__clipboarditem__clipboard__user=request.user ).distinct(), 'paginator': paginator, 'paginated_items': paginated_items, 'permissions': permissions, 'permstest': userperms_for_request(folder, request), 'current_url': request.path, 'title': u'Directory listing for %s' % folder.name, 'search_string': ' '.join(search_terms), 'q': urllib.quote_plus(q), 'show_result_count': show_result_count, 'limit_search_to_folder': limit_search_to_folder, 'is_popup': popup_status(request), 'select_folder': selectfolder_status(request), # needed in the admin/base.html template for logout links 'root_path': "/%s" % admin.site.root_path, 'action_form': action_form, 'actions_on_top': self.actions_on_top, 'actions_on_bottom': self.actions_on_bottom, 'actions_selection_counter': self.actions_selection_counter, 'selection_note': _('0 of %(cnt)s selected') % {'cnt': len(paginated_items.object_list)}, 'selection_note_all': selection_note_all % {'total_count': paginator.count}, 'media': self.media, 'enable_permissions': settings.FILER_ENABLE_PERMISSIONS }, context_instance=RequestContext(request))