def admin_status(request): graph_name = request.GET.get('graph_name') graph_period = request.GET.get('period') if graph_period not in ('y', 'm'): graph_period = 'm' if graph_name: if graph_name == 'users': content = graphs.users_graph(graph_period) elif graph_name == 'payments_paid': content = graphs.payments_paid_graph(graph_period) elif graph_name == 'payments_success': content = graphs.payments_success_graph(graph_period) else: return HttpResponseNotFound() return HttpResponse(content=content, content_type='image/svg+xml') payment_status = ((b, b.get_info()) for b in ACTIVE_BACKENDS.values()) payment_status = ((b, i) for (b, i) in payment_status if i) ctx = { 'api_status': {k: str(v) for k, v in core_api.info.items()}, 'payment_backends': sorted(ACTIVE_BACKENDS.values(), key=lambda x: x.backend_id), 'payment_status': payment_status, } ctx.update(site.each_context(request)) return render(request, 'lambdainst/admin_status.html', ctx)
def detail(self, request): """ Show detail page for a file. Rename existing File/Directory (deletes existing Image Versions/Thumbnails). """ from filebrowser.forms import ChangeForm query = request.GET path = u'%s' % os.path.join(self.directory, query.get('dir', '')) fileobject = FileObject(os.path.join(path, query.get('filename', '')), site=self) if request.method == 'POST': form = ChangeForm(request.POST, path=path, fileobject=fileobject, filebrowser_site=self) if form.is_valid(): new_name = form.cleaned_data['name'] action_name = form.cleaned_data['custom_action'] try: action_response = None if action_name: action = self.get_action(action_name) # Pre-action signal signals.filebrowser_actions_pre_apply.send(sender=request, action_name=action_name, fileobject=[fileobject], site=self) # Call the action to action action_response = action(request=request, fileobjects=[fileobject]) # Post-action signal signals.filebrowser_actions_post_apply.send(sender=request, action_name=action_name, fileobject=[fileobject], result=action_response, site=self) if new_name != fileobject.filename: signals.filebrowser_pre_rename.send(sender=request, path=fileobject.path, name=fileobject.filename, new_name=new_name, site=self) fileobject.delete_versions() self.storage.move(fileobject.path, os.path.join(fileobject.head, new_name)) signals.filebrowser_post_rename.send(sender=request, path=fileobject.path, name=fileobject.filename, new_name=new_name, site=self) messages.add_message(request, messages.SUCCESS, _('Renaming was successful.')) if isinstance(action_response, HttpResponse): return action_response if "_continue" in request.POST: redirect_url = reverse("filebrowser:fb_detail", current_app=self.name) + query_helper(query, "filename=" + new_name, "filename") else: redirect_url = reverse("filebrowser:fb_browse", current_app=self.name) + query_helper(query, "", "filename") return HttpResponseRedirect(redirect_url) except OSError: form.errors['name'] = forms.util.ErrorList([_('Error.')]) else: form = ChangeForm(initial={"name": fileobject.filename}, path=path, fileobject=fileobject, filebrowser_site=self) request.current_app = self.name return TemplateResponse(request, 'filebrowser/detail.html', dict( admin_site.each_context(request), **{ 'form': form, 'fileobject': fileobject, 'query': query, 'title': u'%s' % fileobject.filename, 'is_popup': "pop" in request.GET, 'settings_var': get_settings_var(directory=self.directory), 'breadcrumbs': get_breadcrumbs(query, query.get('dir', '')), 'breadcrumbs_title': u'%s' % fileobject.filename, 'filebrowser_site': self } ))
def createdir(self, request): "Create Directory" from filebrowser.forms import CreateDirForm query = request.GET path = u'%s' % os.path.join(self.directory, query.get('dir', '')) if request.method == 'POST': form = CreateDirForm(path, request.POST, filebrowser_site=self) if form.is_valid(): server_path = os.path.join(path, form.cleaned_data['name']) try: signals.filebrowser_pre_createdir.send( sender=request, path=server_path, name=form.cleaned_data['name'], site=self) self.storage.makedirs(server_path) signals.filebrowser_post_createdir.send( sender=request, path=server_path, name=form.cleaned_data['name'], site=self) messages.add_message( request, messages.SUCCESS, _('The Folder %s was successfully created.') % form.cleaned_data['name']) redirect_url = reverse( "filebrowser:fb_browse", current_app=self.name) + query_helper( query, "ot=desc,o=date", "ot,o,filter_type,filter_date,q,p") return HttpResponseRedirect(redirect_url) except OSError as e: errno = e.args[0] if errno == 13: form.errors['name'] = forms.util.ErrorList( [_('Permission denied.')]) else: form.errors['name'] = forms.util.ErrorList( [_('Error creating folder.')]) else: form = CreateDirForm(path, filebrowser_site=self) request.current_app = self.name return TemplateResponse( request, 'filebrowser/createdir.html', dict( admin_site.each_context(request), **{ 'form': form, 'query': query, 'title': _(u'New Folder'), 'is_popup': "pop" in request.GET, 'settings_var': get_settings_var(directory=self.directory), 'breadcrumbs': get_breadcrumbs(query, query.get('dir', '')), 'breadcrumbs_title': _(u'New Folder'), 'filebrowser_site': self }))
def create_file(self, request): """ Create file :param request: :return: """ from .forms import FileForm query = request.GET path = u'%s' % os.path.join(self.directory, query.get('dir', '')) path_file_open = str(settings.PATH_TEMPLATES) + '/' + str(path) form = FileForm(filebrowser_site=self, path=path_file_open) if request.method == 'POST': form = FileForm(request.POST, path=path_file_open, filebrowser_site=self) if form.is_valid(): new_name = form.cleaned_data['name'] new_text = form.cleaned_data["text_comment"] path_file_open = path_file_open + "/" + new_name F = open(path_file_open, 'w') F.write(new_text) F.close() if "_continue" in request.POST: redirect_url = reverse( "page_editor:fb_detail", current_app=self.name) + query_helper( query, "filename=" + new_name, "filename") else: redirect_url = reverse( "page_editor:fb_browse", current_app=self.name) + query_helper( query, "", "filename") return HttpResponseRedirect(redirect_url) else: return TemplateResponse( request, 'page_editor/create_file.html', dict( admin_site.each_context(request), **{ 'form': form, 'fileobject': '', 'query': query, 'title': u'%s' % '', 'is_popup': "pop" in request.GET, 'settings_var': get_settings_var(directory=self.directory), 'breadcrumbs': get_breadcrumbs(query, query.get('dir', '')), 'breadcrumbs_title': u'%s' % '', 'filebrowser_site': self }))
def upload(self, request): "Multipe File Upload." query = request.GET request.current_app = self.name return TemplateResponse(request, 'filebrowser/upload.html', dict( admin_site.each_context(request), **{ 'query': query, 'title': _(u'Select files to upload'), 'is_popup': "pop" in request.GET, 'settings_var': get_settings_var(directory=self.directory), 'breadcrumbs': get_breadcrumbs(query, query.get('dir', '')), 'breadcrumbs_title': _(u'Upload'), 'filebrowser_site': self } ))
def version(self, request): """ Version detail. This just exists in order to select a version with a filebrowser–popup. """ query = request.GET path = u'%s' % os.path.join(self.directory, query.get('dir', '')) fileobject = FileObject(os.path.join(path, query.get('filename', '')), site=self) request.current_app = self.name return TemplateResponse(request, 'filebrowser/version.html', dict( admin_site.each_context(request), **{ 'fileobject': fileobject, 'query': query, 'settings_var': get_settings_var(directory=self.directory), 'filebrowser_site': self } ))
def admin_ref(request): last_week = datetime.now() - timedelta(days=7) last_month = datetime.now() - timedelta(days=30) top_ref = User.objects.annotate(n_ref=Count('referrals')).order_by('-n_ref')[:10] top_ref_week = User.objects.filter(referrals__user__date_joined__gt=last_week) \ .annotate(n_ref=Count('referrals')) \ .order_by('-n_ref')[:10] top_ref_month = User.objects.filter(referrals__user__date_joined__gt=last_month) \ .annotate(n_ref=Count('referrals')) \ .order_by('-n_ref')[:10] ctx = { 'top_ref': top_ref, 'top_ref_week': top_ref_week, 'top_ref_month': top_ref_month, } ctx.update(site.each_context(request)) return render(request, 'lambdainst/admin_ref.html', ctx)
def admin_ref(request): last_week = datetime.now() - timedelta(days=7) last_month = datetime.now() - timedelta(days=30) top_ref = User.objects.annotate( n_ref=Count('referrals')).order_by('-n_ref')[:10] top_ref_week = User.objects.filter(referrals__user__date_joined__gt=last_week) \ .annotate(n_ref=Count('referrals')) \ .order_by('-n_ref')[:10] top_ref_month = User.objects.filter(referrals__user__date_joined__gt=last_month) \ .annotate(n_ref=Count('referrals')) \ .order_by('-n_ref')[:10] ctx = { 'top_ref': top_ref, 'top_ref_week': top_ref_week, 'top_ref_month': top_ref_month, } ctx.update(site.each_context(request)) return render(request, 'lambdainst/admin_ref.html', ctx)
def createdir(self, request): "Create Directory" from filebrowser.forms import CreateDirForm query = request.GET path = u'%s' % os.path.join(self.directory, query.get('dir', '')) if request.method == 'POST': form = CreateDirForm(path, request.POST, filebrowser_site=self) if form.is_valid(): server_path = os.path.join(path, form.cleaned_data['name']) try: signals.filebrowser_pre_createdir.send(sender=request, path=server_path, name=form.cleaned_data['name'], site=self) self.storage.makedirs(server_path) signals.filebrowser_post_createdir.send(sender=request, path=server_path, name=form.cleaned_data['name'], site=self) messages.add_message(request, messages.SUCCESS, _('The Folder %s was successfully created.') % form.cleaned_data['name']) redirect_url = reverse("filebrowser:fb_browse", current_app=self.name) + query_helper(query, "ot=desc,o=date", "ot,o,filter_type,filter_date,q,p") return HttpResponseRedirect(redirect_url) except OSError as e: errno = e.args[0] if errno == 13: form.errors['name'] = forms.util.ErrorList([_('Permission denied.')]) else: form.errors['name'] = forms.util.ErrorList([_('Error creating folder.')]) else: form = CreateDirForm(path, filebrowser_site=self) request.current_app = self.name return TemplateResponse(request, 'filebrowser/createdir.html', dict( admin_site.each_context(request), **{ 'form': form, 'query': query, 'title': _(u'New Folder'), 'is_popup': "pop" in request.GET, 'settings_var': get_settings_var(directory=self.directory), 'breadcrumbs': get_breadcrumbs(query, query.get('dir', '')), 'breadcrumbs_title': _(u'New Folder'), 'filebrowser_site': self } ))
def delete_confirm(self, request): "Delete existing File/Directory." query = request.GET path = u'%s' % os.path.join(self.directory, query.get('dir', '')) fileobject = FileObject(os.path.join(path, query.get('filename', '')), site=self) if fileobject.filetype == "Folder": filelisting = self.filelisting_class( os.path.join(path, fileobject.filename), sorting_by=query.get('o', 'filename'), sorting_order=query.get('ot', DEFAULT_SORTING_ORDER), site=self) filelisting = filelisting.files_walk_total() if len(filelisting) > 100: additional_files = len(filelisting) - 100 filelisting = filelisting[:100] else: additional_files = None else: filelisting = None additional_files = None request.current_app = self.name return TemplateResponse( request, 'filebrowser/delete_confirm.html', dict( admin_site.each_context(request), **{ 'fileobject': fileobject, 'filelisting': filelisting, 'additional_files': additional_files, 'query': query, 'title': _(u'Confirm delete'), 'is_popup': "pop" in request.GET, 'settings_var': get_settings_var(directory=self.directory), 'breadcrumbs': get_breadcrumbs(query, query.get('dir', '')), 'breadcrumbs_title': _(u'Confirm delete'), 'filebrowser_site': self }))
def delete_confirm(self, request): "Delete existing File/Directory." query = request.GET path = u'%s' % os.path.join(self.directory, query.get('dir', '')) fileobject = FileObject(os.path.join(path, query.get('filename', '')), site=self) if fileobject.filetype == "Folder": filelisting = self.filelisting_class( os.path.join(path, fileobject.filename), sorting_by=query.get('o', 'filename'), sorting_order=query.get('ot', DEFAULT_SORTING_ORDER), site=self) filelisting = filelisting.files_walk_total() if len(filelisting) > 100: additional_files = len(filelisting) - 100 filelisting = filelisting[:100] else: additional_files = None else: filelisting = None additional_files = None request.current_app = self.name return TemplateResponse(request, 'filebrowser/delete_confirm.html', dict( admin_site.each_context(request), **{ 'fileobject': fileobject, 'filelisting': filelisting, 'additional_files': additional_files, 'query': query, 'title': _(u'Confirm delete'), 'is_popup': "pop" in request.GET, 'settings_var': get_settings_var(directory=self.directory), 'breadcrumbs': get_breadcrumbs(query, query.get('dir', '')), 'breadcrumbs_title': _(u'Confirm delete'), 'filebrowser_site': self } ))
def browse(self, request): "Browse Files/Directories." filter_re = [] for exp in EXCLUDE: filter_re.append(re.compile(exp)) # do not filter if VERSIONS_BASEDIR is being used if not VERSIONS_BASEDIR: for k, v in VERSIONS.items(): exp = (r'_%s(%s)$') % (k, '|'.join(EXTENSION_LIST)) filter_re.append(re.compile(exp, re.IGNORECASE)) def filter_browse(item): "Defining a browse filter" filtered = item.filename.startswith('.') for re_prefix in filter_re: if re_prefix.search(item.filename): filtered = True if filtered: return False return True query = request.GET.copy() path = u'%s' % os.path.join(self.directory, query.get('dir', '')) filelisting = self.filelisting_class( path, filter_func=filter_browse, sorting_by=query.get('o', DEFAULT_SORTING_BY), sorting_order=query.get('ot', DEFAULT_SORTING_ORDER), site=self) files = [] if SEARCH_TRAVERSE and query.get("q"): listing = filelisting.files_walk_filtered() else: listing = filelisting.files_listing_filtered() # If we do a search, precompile the search pattern now do_search = query.get("q") if do_search: re_q = re.compile(query.get("q").lower(), re.M) filter_type = query.get('filter_type') filter_date = query.get('filter_date') for fileobject in listing: # date/type filter append = False if (not filter_type or fileobject.filetype == filter_type) and ( not filter_date or get_filterdate(filter_date, fileobject.date or 0)): append = True # search if do_search and not re_q.search(fileobject.filename.lower()): append = False # append if append: files.append(fileobject) filelisting.results_total = len(listing) filelisting.results_current = len(files) p = Paginator(files, LIST_PER_PAGE) page_nr = request.GET.get('p', '1') try: page = p.page(page_nr) except (EmptyPage, InvalidPage): page = p.page(p.num_pages) request.current_app = self.name return TemplateResponse( request, 'filebrowser/index.html', dict( admin_site.each_context(request), **{ 'p': p, 'page': page, 'filelisting': filelisting, 'query': query, 'title': _(u'FileBrowser'), 'is_popup': "pop" in request.GET, # ChangeList uses "pop" 'settings_var': get_settings_var(directory=self.directory), 'breadcrumbs': get_breadcrumbs(query, query.get('dir', '')), 'breadcrumbs_title': "", 'filebrowser_site': self, 'old_design': DJANGO_VERSION < (1, 9) }))
def get_context_data(self, **kwargs): ctx = super().get_context_data(**kwargs) ctx.update(site.each_context(self.request)) return ctx
def admin_context(context, request): return dict(admin_site.each_context(request), **context)
def _add_each_context(self, context, request): # Django >= 1.8 needs has_permission in context if DJANGO_VERSION > (1, 8): return dict(admin_site.each_context(request), **context) return context
def admin_context(context, request): if DJANGO_VERSION >= (1, 8): return dict(admin_site.each_context(request), **context) return context
def browse(self, request): "Browse Files/Directories." filter_re = [] for exp in EXCLUDE: filter_re.append(re.compile(exp)) # do not filter if VERSIONS_BASEDIR is being used if not VERSIONS_BASEDIR: for k, v in VERSIONS.items(): exp = (r'_%s(%s)$') % (k, '|'.join(EXTENSION_LIST)) filter_re.append(re.compile(exp, re.IGNORECASE)) def filter_browse(item): "Defining a browse filter" filtered = item.filename.startswith('.') for re_prefix in filter_re: if re_prefix.search(item.filename): filtered = True if filtered: return False return True query = request.GET.copy() path = u'%s' % os.path.join(self.directory, query.get('dir', '')) filelisting = self.filelisting_class( path, filter_func=filter_browse, sorting_by=query.get('o', DEFAULT_SORTING_BY), sorting_order=query.get('ot', DEFAULT_SORTING_ORDER), site=self) files = [] if SEARCH_TRAVERSE and query.get("q"): listing = filelisting.files_walk_filtered() else: listing = filelisting.files_listing_filtered() # If we do a search, precompile the search pattern now do_search = query.get("q") if do_search: re_q = re.compile(query.get("q").lower(), re.M) filter_type = query.get('filter_type') filter_date = query.get('filter_date') for fileobject in listing: # date/type filter append = False if (not filter_type or fileobject.filetype == filter_type) and (not filter_date or get_filterdate(filter_date, fileobject.date or 0)): append = True # search if do_search and not re_q.search(fileobject.filename.lower()): append = False # append if append: files.append(fileobject) filelisting.results_total = len(listing) filelisting.results_current = len(files) p = Paginator(files, LIST_PER_PAGE) page_nr = request.GET.get('p', '1') try: page = p.page(page_nr) except (EmptyPage, InvalidPage): page = p.page(p.num_pages) request.current_app = self.name return TemplateResponse(request, 'filebrowser/index.html', dict( admin_site.each_context(request), **{ 'p': p, 'page': page, 'filelisting': filelisting, 'query': query, 'title': _(u'FileBrowser'), 'is_popup': "pop" in request.GET, # ChangeList uses "pop" 'settings_var': get_settings_var(directory=self.directory), 'breadcrumbs': get_breadcrumbs(query, query.get('dir', '')), 'breadcrumbs_title': "", 'filebrowser_site': self, 'old_design': DJANGO_VERSION < (1, 9) } ))