From c4570154ff7d89d292e47439ad9dccc5ff0c554b Mon Sep 17 00:00:00 2001 From: "holger.trampe" Date: Thu, 13 Feb 2020 22:36:40 +0100 Subject: [PATCH] Dateisystem angefangen und weitergemacht, ein Bug bei Notifications behoben und Rechtesystem erweitert --- cloud/__pycache__/urls.cpython-38.pyc | Bin 358 -> 432 bytes cloud/__pycache__/views.cpython-38.pyc | Bin 2347 -> 3002 bytes cloud/templates/cloud/cloud_main.html | 154 +++++++++++++++--- cloud/urls.py | 2 + cloud/views.py | 111 ++++++------- .../templates/quicklinks/ql_management.html | 7 +- .../templates/standards/standards_add.html | 2 +- .../standards/standards_management.html | 7 +- .../__pycache__/counter_tag.cpython-38.pyc | Bin 1379 -> 1753 bytes standards/templatetags/counter_tag.py | 11 ++ users/__pycache__/models.cpython-38.pyc | Bin 4987 -> 5061 bytes users/__pycache__/signals.cpython-38.pyc | Bin 3852 -> 3897 bytes users/__pycache__/views.cpython-38.pyc | Bin 17283 -> 17283 bytes users/models.py | 10 +- users/signals.py | 3 +- users/templates/users/base.html | 5 +- 16 files changed, 212 insertions(+), 100 deletions(-) diff --git a/cloud/__pycache__/urls.cpython-38.pyc b/cloud/__pycache__/urls.cpython-38.pyc index cb7a74adc59d3c7f79eb56a0cf5d57cad24df78b..e61a2b1cefef8f25532f84ca665b72ae1fbfd26b 100644 GIT binary patch delta 270 zcmaFHw1HVWl$V!_0SKP}(vshEuQrLSLQ#evMdzpb^T&YZ1Y$@CzUOH10dkRl5gC_4wkdc~&|YG9!v7F(oA>vnZ(&r0*6tP&LrflGLKS;*|_V YJRluBlX)5a`9S{WVFW^E5k|g$00nqMEC2ui delta 168 zcmdnM{ESIEl$V!_0SJWhUE;O_>Bk@rGGGOA9DumkWTLjTTqZAo3^dC-Oe6S+<0R2S;9uS144<)?~_p>p$8P)n=9Jb@&j>5 zFE#V=&L;PzA8thrL(UFw7$<3Qc-L5*$+U#h#!f7xwtF(d4YEFbYTTed3}3P9Q}RuS zWEP{z0uVY&uMA%r=PHx1D8VSeh~HwvMRV~pHnI;0rycf;%I{USoonZl3};Vh-)ND( z3Byu_QBjq6rbbjb$?RiRMvWZMz6tqMxLGIM>SW|oHB8L8LCQE1bDL**j^}xS7kP=7 zc?D~a^=_5=c4FQncOUn&i4F5!KbPc^Y{!x>#zsd~J`GOtNnTC-o3~H-%p9qcejzD< zYbO8XvngGxkwKEJk$zE49_Lczb5AI2sDpYbu|`u#>3~v_n4{?=i`4xW_kSLn$2_18 zir4$)G`zDA-Z;l;I7zUbm`V8ql9c((Rnjj%qxVKk3beRt!C#a%TfojrR4yDZ+& zW*{DjKpS`q_KYR9s{ng^3vm6*^*v*-w0iRsShRaBz}u_KC=QWcU0L2UfiGGx-Cn(g zD;{~fAc{CziTKtb-H_O!n#dYV4caWDU&j$4k01JKTT+yo=}l}{y5M@se;}N|4?EgK z)j_NcxHU0|(!|oRs32b>9;S53@K(k&)+kWi0ZFg6e$pBb(wAmJ(inRsa72Hx5#o7-1Sb+yQg}XAb zlG^G#bY&~nX50&Wr89vDwSj8da(g{USzA(cqX$A;J3RL-o0Q55?~yTn11|`3nwXM^HZ}F-`)KtF!c~Ox2#tG)7Z9!i%)^L31t7ExzbY*=gBt7v&}TCX zEKBiMrKbQ5T7-ux4;odVvp^SFl`Via?kuxBJ;Tni;Y-UM;PaN6*CogC0ymC55d@AS z8z@L24JHj^26*`JrEej+F<8--$n~(7#vju7sDBJ2RpnF>AKzrQqV0Ic^F$mss9Y!H zD)i-1EBx&bUFqUcKW#q3UicghrGFDt-T}I?_{-P!4SHD@c-swI(bBe3Jvj{$`5^*E Wlq&usi`4#w;j8SDRis&C^7>y5JH77! delta 1138 zcmYjPUvC>l5Z~R~`{Q$*7^mR2B&8{B>8Yp=An|~Ns)_)rgaRT|LRQQ5db>$&UwqE) zx`F5{Ke&P?kg9t_JlJm_#8cn+2z-S721w-#ARd@G2iiN$?C#8OW_RW{zqfyFHSRPT zA%So2c;~C9Pa2!_k0;lEyVTtfYohs>bT>aH;w8~~Ohij^xjy6F3u1MTMC+wT|C;Wm z3}a6}A66IS0}yRM88W8@S~1aSq**=|o$WGX=jm?w9eZ=?_PxGekUs507ry5c23-pl1iDb0kva5eL6?PcyhELV zToG4qz+yc;egF@&UUDFZ={MHRkB3r4b=5>KG~j3~H5BpLr+Z&m_oLgNe7L9Zd6tj0 zRMsDN2XgL0t#Y0VqOWp_j{N&eb&z2V}kuqJJjk7T4x&xgl}ph z_&>Y`DZnejpI{(h92hjDzN@z26_!8D59P_Z&Y={&q_b>0mfXyn%>#yEvtQa4a_ zP(_Ghqk;7X$B8=7>O5L;0MyHERL5csytQ3iuJ32 sL#bE~D5u<6@fBL4*PgD2x9G)X5mh;8ej&^9N#(co8(y#$gsrpx0(CJKmH+?% diff --git a/cloud/templates/cloud/cloud_main.html b/cloud/templates/cloud/cloud_main.html index ac18deb..e49f215 100644 --- a/cloud/templates/cloud/cloud_main.html +++ b/cloud/templates/cloud/cloud_main.html @@ -1,23 +1,46 @@ {% extends "users/base.html" %} {% load crispy_forms_tags %} +{% load counter_tag %} {% block content %} +
-

Dateien

-
-

- Hier können Sie Dateien und Ordner für ihre Agentur verwalten. -

+

Dateien 

+
+ {% if user|usergperm:"filesmanager" %}
{% csrf_token %} + {{form.media}} {{form|crispy}}
+ Dateien werden immer in das aktuelle Verzeichnis hochgeladen.
-
-

- {% if files %} +{% endif %} +

+ @@ -29,29 +52,114 @@ - {% for dir in dirs_level %} + {% for dir in dirs %} - + + + + {% endfor %} - {% for ele in files %} - - - - - - - + {% for ele in files %} + + + + + + + {% endfor %}
{{dir}}{{dir|splitdirstyle}} + {% if user|usergperm:"filedirmanager" and user|usergperm:"filesviewer" %} + + + {% endif %} +
{{ele.file}}{{ele.owner.first_name}} {{ele.owner.last_name}}{{ele.date_created}}Optionen
{{ele.file|filename}}{{ele.owner.first_name}} {{ele.owner.last_name}}{{ele.date_created}} + {% if user|usergperm:"filesmanager" and user|usergperm:"filesviewer" %} + + + {% endif %} +
- {% else %} - - {% endif %} +

+ + + + + + {% endblock content %} diff --git a/cloud/urls.py b/cloud/urls.py index 424fb0d..e42773c 100644 --- a/cloud/urls.py +++ b/cloud/urls.py @@ -1,6 +1,8 @@ from django.urls import path from .views import CloudMain +from . import views urlpatterns = [ path('/', CloudMain.as_view(template_name="cloud/cloud_main.html"), name='cloud-main'), + path('clajax/', views.adddirbyajax, name="cloud-ajax"), ] diff --git a/cloud/views.py b/cloud/views.py index dd5eab7..ebc8d65 100644 --- a/cloud/views.py +++ b/cloud/views.py @@ -10,80 +10,73 @@ from .forms import CloudAddFileForm from django.conf import settings from django.core.files.storage import default_storage from digitaleagentur.settings import BASE_DIR +from django.http import JsonResponse import os -''' -import os -def list_files(startpath): - for root, dirs, files in os.walk(startpath): - level = root.replace(startpath, '').count(os.sep) - indent = ' ' * 4 * (level) - print('{}{}/'.format(indent, os.path.basename(root))) - subindent = ' ' * 4 * (level + 1) - for f in files: - print('{}{}'.format(subindent, f)) -''' - -def list_files(startpath, deep): - for root, dirs, files in os.walk(startpath): - level = root.replace(startpath, '').count(os.sep) - if(level <= deep+1 and (deep != 0 and(level > 0))): - print(level) - print(os.path.basename(root)) - for f in files: - print(f) - class CloudMain(LoginRequiredMixin, FormView): form_class = CloudAddFileForm - success_url = '/cloud/0' - + success_url = '/cloud/home' def form_valid(self, form): form = CloudAddFileForm(self.request.POST, self.request.FILES['file']) - tempdata = Data(file=self.request.FILES['file'], subdir="", agency=self.request.user.profile.agency, owner=self.request.user) + tempdata = Data(file=self.request.FILES['file'], subdir="/"+self.request.POST.get("subdirinfo")+"/", agency=self.request.user.profile.agency, owner=self.request.user) tempdata.save() return super().form_valid(form) # Change context and return for template-data - def get_context_data(self, **kwargs): + def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) agency_id = self.request.user.profile.agency.pk - if(self.kwargs['level'] == "home"): - print(list_files(os.path.dirname(BASE_DIR+"/media/agencydata/agency_"+str(agency_id)+"/files/"), 0)) - else: - print(list_files(os.path.dirname(BASE_DIR+"/media/agencydata/agency_"+str(agency_id)+"/files/"+self.kwargs['level']),2)) - context.update({'active_link' : 'cloud', 'files': list_files("agencydata/agency_"+str(agency_id)+"/", 2)}) - return context + if self.request.is_ajax() == False: + agencyfiles = Data.objects.filter(agency__pk=agency_id) - - -''' -dirs_level = [] - files = "" - subdir = "" - files_correcteddirname = [] - agency_id = self.request.user.profile.agency.pk - if(self.kwargs["level"] == "home"): - files = Data.objects.filter(agency__pk=agency_id, subdir="") - - for f in files: - tempstr = str(f.file) - files_correcteddirname.append(tempstr.split("/")[3]) - - dirs = Data.objects.filter(agency__pk=agency_id).exclude(subdir="") + dirs = [] + files = [] - for d in dirs: - tempstr = str(d.file) - dirs_level.append(tempstr.split("/")[3]) - else: - subdir = self.kwargs["level"] - files = Data.objects.filter(agency__pk=agency_id, file__startswith="agencydata/agency_"+str(agency_id)+"/files/"+subdir) - dirs = Data.objects.filter(agency__pk=agency_id).exclude(subdir="") - for d in dirs: - tempstr = str(d.file) - dirs_level.append(tempstr.split("/")[4]) + dirs = os.listdir(BASE_DIR+"\\media\\agencydata\\agency_"+str(agency_id)+"\\files\\") + if(self.kwargs['level'] != "home"): + dirs = os.listdir(BASE_DIR+"\\media\\agencydata\\agency_"+str(agency_id)+"\\files\\"+self.kwargs['level']) + + # ALLOWED FILETYPES + filecheckarr = [".txt", ".pdf", ".TXT", ".PDF", ".jpg", ".JPG", ".png", ".PNG", ".jpeg", ".JPEG", ".docx", ".odt", ".odf"] + + for d in dirs: + for fa in filecheckarr: + if fa in d: + templevel = self.kwargs["level"].split("\\") + templevel_final = templevel[len(self.kwargs["level"].split("\\"))-1] + if(templevel_final == "home"): + templevel_final = "" + tempsearchname = templevel_final+"/"+d + fileob = list(Data.objects.filter(file__endswith=tempsearchname))[0] + files.append(fileob) + dirs.remove(d) + + if(self.kwargs['level'] != "home"): + i = 0 + for d in dirs: + dirs[i] = self.kwargs["level"] + "\\" + d + i += 1 + + crumplevel = self.kwargs["level"].split("\\") + + context.update({'active_link' : 'cloud', 'files': files, 'dirs' : dirs, 'agencyfiles' : agencyfiles, 'level' : self.kwargs["level"], 'crumplevel' : crumplevel}) + return context + else: + context.update({'active_link' : 'cloud'}) + adddirname = self.request.GET.get("adddirname") + newdirname = self.request.GET.get("newdirname") + + if(adddirname == "home"): + os.mkdir(BASE_DIR+"\\media\\agencydata\\agency_"+str(agency_id)+"\\files\\" + newdirname) + else: + os.mkdir(BASE_DIR+"\\media\\agencydata\\agency_"+str(agency_id)+"\\files\\" + adddirname + "\\" + newdirname) + + return {} - context.update({'active_link' : 'cloud', 'files': files, 'dirs_level' : dirs_level}) -''' \ No newline at end of file + + +def adddirbyajax(request): + return {"success" : success} diff --git a/quicklinks/templates/quicklinks/ql_management.html b/quicklinks/templates/quicklinks/ql_management.html index 8dac933..e23b351 100644 --- a/quicklinks/templates/quicklinks/ql_management.html +++ b/quicklinks/templates/quicklinks/ql_management.html @@ -3,15 +3,12 @@ {% block content %} {% if request.user.profile.agency.module_quicklinks %}
-

Quicklinks

+

Quicklinks 


-

- Quicklinks helfen zur schnellen Verlinkung von oft genutzten Diensten. -

{% if user|usergperm:"modulequicklinks" %} {% endif %} diff --git a/standards/templates/standards/standards_add.html b/standards/templates/standards/standards_add.html index 908c4fa..f1ea737 100644 --- a/standards/templates/standards/standards_add.html +++ b/standards/templates/standards/standards_add.html @@ -1,7 +1,7 @@ {% extends "users/base.html" %} {% load crispy_forms_tags %} {% block content %} -
+

Neuen Standard anlegen


diff --git a/standards/templates/standards/standards_management.html b/standards/templates/standards/standards_management.html index b058c8e..beaa4ff 100644 --- a/standards/templates/standards/standards_management.html +++ b/standards/templates/standards/standards_management.html @@ -3,15 +3,12 @@ {% block content %}
-

Standards

+

Standards 

Sichtbar sind alle veröffentlichten und von {{ user.first_name }} {{ user.last_name}} erstellten Standards.
-

- Standards dokumentieren und erläutern verschiedenen Verfahren, strukturiert nach Bereichen und Aufgaben. -


diff --git a/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc b/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc index 321d86b11ad852c7cf1635a06fa54b0c1dda0b1d..071e4fccc497b70249aaa32fe4aca1043e28fdd2 100644 GIT binary patch delta 933 zcmZva&2G~`5XX1c>%?(lJ88aJCT2qy9ONWCR)3dkcx6B z*B&CjKy%E2*Wg%j#aB+e0uqARsera(r5W%1JpOxTXTRBB9ruOf*bG-ZdG_*qY3{DW z*}T`ANhU>H9+X2kwH9npku0#o%D5^`S^CJ1VNj!}EG>#0iYn5k$i>K$RarX$>BuUv zIx&}+CtYF>tIY8V!!H(_=dC=d53N5>51<-g$R=6{o; z{XI->>E!dDSfCnt#D~z#KlAO@zmK%IT0wU`zhS)FSi@Z*rlCp-k!C@5p%%(q$M?Pb zlM!{BxbsU&%d56_9qqdL9kDgLEMHWjbd-e2Zm6~}=e#2Bg4)1n;H1+y%4DR{?0p>W z0kS_!_i3PQqovo-9kEj;VF4fD2r{%|kbIS`F+6Oe{{x1qj!8bB6()%mMjY<@d|;z` zHX$^qWMML;?UmLFkLU<J0Cjt+xdxj&Q&k}B5utb z{eiv`s-fLY?er{_9uple)lDK7glRl|Q96Wv348(j_RPy-7rF1P^OL=$Kw O8*C3vKTR}&#(x7PoVCRO delta 570 zcmZutF-yZh6wXU7X?o2iOJ)ydO>Q9%B6O7(AA;b<{*lb zKgFM51{WtCTwQ&44puSnzP#_d@80{8XZA|{Eyk#UPxWc7`(Tg!Nw^)&&tD{PSGYH} zU2eq1#66;%aQn)*gzb`M4liitY3A~xW(=9nDKA|E_c+yBpf#p7pEIqMwH9ct%tNh( zys~LT)i;$T0%^mnT!0pfAh(C{@pQ8;AH)o@PE?Wa_J&+?nte}AURsg-(G=c|Z V@W3^RNr2i|1k0g711$Bnz5u4%Wy$~m diff --git a/standards/templatetags/counter_tag.py b/standards/templatetags/counter_tag.py index f4884d3..58a0593 100644 --- a/standards/templatetags/counter_tag.py +++ b/standards/templatetags/counter_tag.py @@ -1,6 +1,7 @@ from django import template from django.contrib.auth.models import Group, User from users.models import AgencyGroup +import os register = template.Library() b = 0 @@ -50,6 +51,16 @@ def usergperm(user, perm): def is_member(id, groupname): usertocheck = User.objects.get(pk=id) return usertocheck.groups.filter(name=groupname).exists() + +# Return a Filename splitted to only see the LAST element! +@register.filter(name="splitdirstyle") +def split_dir_style(dirtosplit): + tempsplit = dirtosplit.split("\\") + return tempsplit[len(tempsplit)-1] + +@register.filter(name="filename") +def filename(value): + return os.path.basename(value.file.name) ''' class Counter: count = 0 diff --git a/users/__pycache__/models.cpython-38.pyc b/users/__pycache__/models.cpython-38.pyc index 623516e82437b3280e63e0ae0ee369a5ff6d8e6b..821489b6d8daf0ae7e4c41da9742a417d40e4ef3 100644 GIT binary patch delta 239 zcmeyZc2u1&l$V!_0SGd7xyJcRZ{#cC=i&x(9e}u4ZE_F4EME#&3U@kp6mtqsFoP!V zic!fg;&Jk;$zBr&2YU zqIl9Wb5e_8(n2nYC8?RIc?wCX5MxsFfNJO$$f%iyo^kYOkazFfnM;_6q;PmA-egH;7&#Wu_sF^ delta 171 zcmX@A{#%VNl$V!_0SICwT;je+ZR9KA=i&r%9e}u4X>t$0ELS>b6mtq!FoP!dD@P2@#+K2Qw2R8vMTbz2G%Q0HC!l@c;k- diff --git a/users/__pycache__/signals.cpython-38.pyc b/users/__pycache__/signals.cpython-38.pyc index 025e517357502a298fc17eb74d7adfefbfe64d7f..3f7f6d79604919ca5d5d0cc7a940b7ab2bbf3b77 100644 GIT binary patch delta 346 zcmXv}y-EW?5Z>L}+uOZlFCi9ZQX~=t4df}rSQrR`u@O{+0cEY+T)BsemPzAwl0r)> zk$|9$@1YN1VdWb*i#Raf{CwZcFw^#HTkmO|6126)!QuC_Zcv@ykZZc%f#qG&YcBfq zM_dGjLLZ_}-VlJ6kz>G`#J&{7P{SNGk>L={XvrPlBnP);>|zreVW+^6O>$BS>_~`n zf>B|e6e$RoI04C=U9(cU$WDt2NKiqUlRxcF5JQS%0%HZK>Irocs-S0rhGntQwp(N_ z{yzm7p5#!Q@lrW;Uwa^woOglXPxaB*f5}T)_or&ZKdDY5wGI5qHUqQ*Z23<$ly8r+H delta 319 zcmYLEy-EW?5T3c++xtoOqDgU{$XO^tz|J?2AZQ?sKZT&xfU;oWdgUGlVv!}`DqA3zJ=z_~&k_-4MD`DTWB%V)Vh)H(*X$D_gN$FuID?%luyk5?$&hyGH% zi9hN(VnKr;~gIGALShTC^#kuu-P)uN@K(IG;-~xAYmhfLhd^D{PkeCb4P;D>;uilD# aLfJj$ @@ -126,14 +127,14 @@ {% endif %} - {% if request.user.profile.agency.module_files %} + {% if request.user.profile.agency.module_files and request.user|usergperm:"filesviewer" %} {% if active_link == 'cloud' %}