Dateisystem angefangen und weitergemacht, ein Bug bei Notifications behoben und Rechtesystem erweitert
This commit is contained in:
parent
52dc3e444e
commit
c4570154ff
Binary file not shown.
Binary file not shown.
|
|
@ -1,23 +1,46 @@
|
||||||
{% extends "users/base.html" %}
|
{% extends "users/base.html" %}
|
||||||
{% load crispy_forms_tags %}
|
{% load crispy_forms_tags %}
|
||||||
|
{% load counter_tag %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<style>
|
||||||
|
.icon-hover:hover{
|
||||||
|
color: gray;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
<div class="content-section col-12">
|
<div class="content-section col-12">
|
||||||
<h3>Dateien</h3>
|
<h3>Dateien <small><i data-toggle="tooltip" data-placement="top" title="Hier können Sie Dateien und Ordner für ihre Agentur verwalten." class="far fa-question-circle"></i></small></h3>
|
||||||
<hr>
|
<hr>
|
||||||
<p>
|
{% if user|usergperm:"filesmanager" %}
|
||||||
Hier können Sie Dateien und Ordner für ihre Agentur verwalten.
|
|
||||||
</p>
|
|
||||||
<form method="POST" id="fileuploadform" enctype="multipart/form-data" class="col-6">
|
<form method="POST" id="fileuploadform" enctype="multipart/form-data" class="col-6">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
|
<input type="hidden" name="subdirinfo" value="{{level}}">
|
||||||
{{form.media}}
|
{{form.media}}
|
||||||
{{form|crispy}}
|
{{form|crispy}}
|
||||||
<div class="mt-2">
|
<div class="mt-2">
|
||||||
<button class="btn btn-primary" type="submit">Hochladen</button>
|
<button class="btn btn-primary" type="submit">Hochladen</button>
|
||||||
|
<small>Dateien werden immer in das aktuelle Verzeichnis hochgeladen.</small>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<div class="mt-4">
|
{% endif %}
|
||||||
<p>
|
<div class="mt-4">
|
||||||
{% if files %}
|
<nav aria-label="breadcrumb">
|
||||||
|
<ol class="breadcrumb">
|
||||||
|
<li class="breadcrumb-item" aria-current="page"><a href="{% url 'cloud-main' level='home' %}"><i class="fas fa-home"></i></a></li>
|
||||||
|
{% for cr in crumplevel %}
|
||||||
|
{% if cr != 'home' %}
|
||||||
|
{{forloop.counter1|add:1}}
|
||||||
|
{% if forloop.last %}
|
||||||
|
<li class="breadcrumb-item" active>{{cr}}</li>
|
||||||
|
{% else %}
|
||||||
|
<li class="breadcrumb-item"><a href="{% url 'cloud-main' cr %}">{{cr}}</a></li>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% if user|usergperm:"filedirmanager" and user|usergperm:"filesviewer" %}
|
||||||
|
<li class="breadcrumb-item" active><i onclick="javascript:addDirModal()" class="fas fa-folder-plus icon-hover"></i></li>
|
||||||
|
{% endif %}
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
<table class="table table-hover">
|
<table class="table table-hover">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
|
@ -29,29 +52,114 @@
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for dir in dirs_level %}
|
{% for dir in dirs %}
|
||||||
<tr>
|
<tr>
|
||||||
<td><i class="fas fa-folder"></i></td>
|
<td><i class="fas fa-folder"></i></td>
|
||||||
<td><a href="{% url 'cloud-main' dir %}">{{dir}}</a></td>
|
<td><a href="{% url 'cloud-main' dir %}">{{dir|splitdirstyle}}</a></td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
{% if user|usergperm:"filedirmanager" and user|usergperm:"filesviewer" %}
|
||||||
|
<button type="button" class="btn btn-danger btn-sm" onclick="javascript:tryDelDir('{{dir|splitdirstyle}}')" data-toggle="tooltip" data-placement="top" title="Ordner löschen"><i class="fas fa-trash-alt"></i></button>
|
||||||
|
<button type="button" class="btn btn-primary btn-sm" onclick="javascript:changeDirName('{{dir|splitdirstyle}}')" data-toggle="tooltip" data-placement="top" title="Ordnernnamen andern"><small><i class="fas fa-pen"></i></small></button>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% for ele in files %}
|
{% for ele in files %}
|
||||||
<tr>
|
<tr>
|
||||||
<td><i class="fas fa-file"></i></td>
|
<td><i class="fas fa-file"></i></td>
|
||||||
<td>{{ele.file}}</td>
|
<td><a href="{{ele.file.url}}" download>{{ele.file|filename}}</a></td>
|
||||||
<td>{{ele.owner.first_name}} {{ele.owner.last_name}}</td>
|
<td>{{ele.owner.first_name}} {{ele.owner.last_name}}</td>
|
||||||
<td>{{ele.date_created}}</td>
|
<td>{{ele.date_created}}</td>
|
||||||
<td>Optionen</td>
|
<td>
|
||||||
</tr>
|
{% if user|usergperm:"filesmanager" and user|usergperm:"filesviewer" %}
|
||||||
|
<button type="button" class="btn btn-danger btn-sm" onclick="javascript:tryDelFile({{ele.pk}})" data-toggle="tooltip" data-placement="top" title="Datei löschen"><i class="fas fa-trash-alt"></i></button>
|
||||||
|
<button type="button" class="btn btn-primary btn-sm" onclick="javascript:changeFileName({{ele.pk}})" data-toggle="tooltip" data-placement="top" title="Dateinamen andern"><small><i class="fas fa-pen"></i></small></button>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
{% else %}
|
|
||||||
<div class="alert alert-primary" role="alert">
|
|
||||||
Für Ihre Agentur wurden noch keine Dateien hochgeladen.
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- MODEAL ADD DIR -->
|
||||||
|
<div class="modal fade" id="addDir" tabindex="-1" role="dialog" data-backdrop="static" aria-labelledby="" aria-hidden="true">
|
||||||
|
<div class="modal-dialog " role="document">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="mainmodalArea_title">Ordner in {{crumplevel|last}} erstellen</h5>
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-label="Schließen">
|
||||||
|
<span aria-hidden="true">×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="exampleInputPassword1">Name:</label>
|
||||||
|
<input class="form-control" id="newdirname" type="text" value="" placeholder="Ordnername" onkeyup="javascript:validateDirName(this.value, 0)">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-danger" data-dismiss="modal">Abrechen</button>
|
||||||
|
<button id="doActionTaskModal" type="button" class="btn btn-success" data-dismiss="modal" onclick="javascript:addDirAction()" disabled="true">Ordner anlegen</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function tryDelFile(dataid){
|
||||||
|
console.log("FILE " + dataid);
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeFileName(dataid){
|
||||||
|
console.log("FILE " + dataid);
|
||||||
|
}
|
||||||
|
|
||||||
|
function tryDelDir(dataid){
|
||||||
|
console.log("DIR " + dataid);
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeDirName(dataid){
|
||||||
|
console.log("DIR " + dataid);
|
||||||
|
}
|
||||||
|
|
||||||
|
function addDirModal(){
|
||||||
|
|
||||||
|
$("#addDir").modal("toggle");
|
||||||
|
$("#newdirname").val("");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateDirName(newdirname){
|
||||||
|
if(newdirname.length > 0){
|
||||||
|
$("#doActionTaskModal").attr("disabled", false);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$("#doActionTaskModal").attr("disabled", true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function addDirAction(){
|
||||||
|
$.ajax(
|
||||||
|
{
|
||||||
|
type: "GET",
|
||||||
|
url: "/cloud/clajax",
|
||||||
|
data:{
|
||||||
|
adddirname : "{{level}}",
|
||||||
|
newdirname : $("#newdirname").val()
|
||||||
|
},
|
||||||
|
success: function( data )
|
||||||
|
{
|
||||||
|
window.location = window.location;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
from django.urls import path
|
from django.urls import path
|
||||||
from .views import CloudMain
|
from .views import CloudMain
|
||||||
|
from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('<str:level>/', CloudMain.as_view(template_name="cloud/cloud_main.html"), name='cloud-main'),
|
path('<str:level>/', CloudMain.as_view(template_name="cloud/cloud_main.html"), name='cloud-main'),
|
||||||
|
path('clajax/', views.adddirbyajax, name="cloud-ajax"),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
111
cloud/views.py
111
cloud/views.py
|
|
@ -10,80 +10,73 @@ from .forms import CloudAddFileForm
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.files.storage import default_storage
|
from django.core.files.storage import default_storage
|
||||||
from digitaleagentur.settings import BASE_DIR
|
from digitaleagentur.settings import BASE_DIR
|
||||||
|
from django.http import JsonResponse
|
||||||
import os
|
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):
|
class CloudMain(LoginRequiredMixin, FormView):
|
||||||
form_class = CloudAddFileForm
|
form_class = CloudAddFileForm
|
||||||
success_url = '/cloud/0'
|
success_url = '/cloud/home'
|
||||||
|
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
form = CloudAddFileForm(self.request.POST, self.request.FILES['file'])
|
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()
|
tempdata.save()
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
|
|
||||||
# Change context and return for template-data
|
# 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)
|
context = super().get_context_data(**kwargs)
|
||||||
agency_id = self.request.user.profile.agency.pk
|
agency_id = self.request.user.profile.agency.pk
|
||||||
if(self.kwargs['level'] == "home"):
|
if self.request.is_ajax() == False:
|
||||||
print(list_files(os.path.dirname(BASE_DIR+"/media/agencydata/agency_"+str(agency_id)+"/files/"), 0))
|
agencyfiles = Data.objects.filter(agency__pk=agency_id)
|
||||||
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
|
|
||||||
|
|
||||||
|
dirs = []
|
||||||
|
files = []
|
||||||
'''
|
|
||||||
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="")
|
|
||||||
|
|
||||||
for d in dirs:
|
dirs = os.listdir(BASE_DIR+"\\media\\agencydata\\agency_"+str(agency_id)+"\\files\\")
|
||||||
tempstr = str(d.file)
|
if(self.kwargs['level'] != "home"):
|
||||||
dirs_level.append(tempstr.split("/")[3])
|
dirs = os.listdir(BASE_DIR+"\\media\\agencydata\\agency_"+str(agency_id)+"\\files\\"+self.kwargs['level'])
|
||||||
else:
|
|
||||||
subdir = self.kwargs["level"]
|
# ALLOWED FILETYPES
|
||||||
files = Data.objects.filter(agency__pk=agency_id, file__startswith="agencydata/agency_"+str(agency_id)+"/files/"+subdir)
|
filecheckarr = [".txt", ".pdf", ".TXT", ".PDF", ".jpg", ".JPG", ".png", ".PNG", ".jpeg", ".JPEG", ".docx", ".odt", ".odf"]
|
||||||
dirs = Data.objects.filter(agency__pk=agency_id).exclude(subdir="")
|
|
||||||
for d in dirs:
|
for d in dirs:
|
||||||
tempstr = str(d.file)
|
for fa in filecheckarr:
|
||||||
dirs_level.append(tempstr.split("/")[4])
|
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})
|
|
||||||
'''
|
|
||||||
|
def adddirbyajax(request):
|
||||||
|
return {"success" : success}
|
||||||
|
|
|
||||||
|
|
@ -3,15 +3,12 @@
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% if request.user.profile.agency.module_quicklinks %}
|
{% if request.user.profile.agency.module_quicklinks %}
|
||||||
<div class="content-section col-12">
|
<div class="content-section col-12">
|
||||||
<h3>Quicklinks</h3>
|
<h3>Quicklinks <small><i data-toggle="tooltip" data-placement="top" title="Quicklinks helfen zur schnellen Verlinkung von oft genutzten Diensten." class="far fa-question-circle"></i></small></h3>
|
||||||
<hr>
|
<hr>
|
||||||
<p>
|
|
||||||
Quicklinks helfen zur schnellen Verlinkung von oft genutzten Diensten.
|
|
||||||
</p>
|
|
||||||
{% if user|usergperm:"modulequicklinks" %}
|
{% if user|usergperm:"modulequicklinks" %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="content-section col-4">
|
<div class="content-section col-4">
|
||||||
<a class="btn btn-primary" href="{% url 'ql-addql' %}">Quicklink anlegen</a>
|
<a class="btn btn-primary" href="{% url 'ql-addql' %}"><i class="fas fa-plus"></i> Quicklink</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{% extends "users/base.html" %}
|
{% extends "users/base.html" %}
|
||||||
{% load crispy_forms_tags %}
|
{% load crispy_forms_tags %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="content-section col-6">
|
<div class="content-section col-8">
|
||||||
<h3>Neuen Standard anlegen</h3>
|
<h3>Neuen Standard anlegen</h3>
|
||||||
<hr>
|
<hr>
|
||||||
<form method="POST" id="taskareaform">
|
<form method="POST" id="taskareaform">
|
||||||
|
|
|
||||||
|
|
@ -3,15 +3,12 @@
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="content-section col-12">
|
<div class="content-section col-12">
|
||||||
<h3>Standards</h3>
|
<h3>Standards <small><i data-toggle="tooltip" data-placement="top" title="Standards dokumentieren und erläutern verschiedenen Verfahren, strukturiert nach Bereichen und Aufgaben." class="far fa-question-circle"></i></small></h3>
|
||||||
<small>Sichtbar sind alle veröffentlichten und von {{ user.first_name }} {{ user.last_name}} erstellten Standards.</small>
|
<small>Sichtbar sind alle veröffentlichten und von {{ user.first_name }} {{ user.last_name}} erstellten Standards.</small>
|
||||||
<hr>
|
<hr>
|
||||||
<p>
|
|
||||||
Standards dokumentieren und erläutern verschiedenen Verfahren, strukturiert nach Bereichen und Aufgaben.
|
|
||||||
</p>
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="content-section col-4">
|
<div class="content-section col-4">
|
||||||
<a class="btn btn-primary" href="{% url 'standard-add' %}">Standard anlegen</a>
|
<a class="btn btn-primary" href="{% url 'standard-add' %}"><i class="fas fa-plus"></i> Standard</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,6 +1,7 @@
|
||||||
from django import template
|
from django import template
|
||||||
from django.contrib.auth.models import Group, User
|
from django.contrib.auth.models import Group, User
|
||||||
from users.models import AgencyGroup
|
from users.models import AgencyGroup
|
||||||
|
import os
|
||||||
register = template.Library()
|
register = template.Library()
|
||||||
|
|
||||||
b = 0
|
b = 0
|
||||||
|
|
@ -50,6 +51,16 @@ def usergperm(user, perm):
|
||||||
def is_member(id, groupname):
|
def is_member(id, groupname):
|
||||||
usertocheck = User.objects.get(pk=id)
|
usertocheck = User.objects.get(pk=id)
|
||||||
return usertocheck.groups.filter(name=groupname).exists()
|
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:
|
class Counter:
|
||||||
count = 0
|
count = 0
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -194,12 +194,14 @@ class AgencyGroup(models.Model):
|
||||||
|
|
||||||
permissions = [
|
permissions = [
|
||||||
('agencyinfo', 'Agenturinformationen verändern'),
|
('agencyinfo', 'Agenturinformationen verändern'),
|
||||||
('usermanager', 'Benutzer bearbeiten'),
|
('usermanager', 'Mitarbeiter bearbeiten'),
|
||||||
('groupmanager', 'Gruppen bearbeiten'),
|
('groupmanager', 'Gruppen bearbeiten'),
|
||||||
('areaconfig', 'Bereiche bearbeiten'),
|
('structuremanager', 'Struktur bearbeiten'),
|
||||||
('activityconfig', 'Tätigkeiten bearbeiten'),
|
|
||||||
('standardmanager', 'Standards bearbeiten und freischalten'),
|
('standardmanager', 'Standards bearbeiten und freischalten'),
|
||||||
('modulenews', 'News bearbeiten und veröffentlichen'),
|
('modulenews', 'News bearbeiten und veröffentlichen'),
|
||||||
('modulesconfig', 'Module verwalten'),
|
('modulesconfig', 'Module verwalten'),
|
||||||
('modulequicklinks', 'Quicklinks bearbeiten')
|
('modulequicklinks', 'Quicklinks bearbeiten'),
|
||||||
|
('filesmanager', 'Dateien bearbeiten'),
|
||||||
|
('filedirmanager', 'Ordner bearbeiten'),
|
||||||
|
('filesviewer', 'Dateien lesen')
|
||||||
]
|
]
|
||||||
|
|
@ -101,6 +101,7 @@ def adjust_group_notifications(instance, action, reverse, model, pk_set, using,
|
||||||
|
|
||||||
@receiver(post_save, sender=News)
|
@receiver(post_save, sender=News)
|
||||||
def save_news(sender, instance, **kwargs):
|
def save_news(sender, instance, **kwargs):
|
||||||
|
GLOBALSENDMAILS = True
|
||||||
if(kwargs["created"]):
|
if(kwargs["created"]):
|
||||||
usersofagency = User.objects.filter(profile__agency__pk=instance.agency.pk)
|
usersofagency = User.objects.filter(profile__agency__pk=instance.agency.pk)
|
||||||
for user in usersofagency:
|
for user in usersofagency:
|
||||||
|
|
@ -126,7 +127,7 @@ def save_news(sender, instance, **kwargs):
|
||||||
|
|
||||||
# SIGNALS FOR TASK
|
# SIGNALS FOR TASK
|
||||||
@receiver(signal=m2m_changed, sender=Tasks.usersfield.through)
|
@receiver(signal=m2m_changed, sender=Tasks.usersfield.through)
|
||||||
def adjust_group_notifications(instance, action, reverse, model, pk_set, using, *args, **kwargs):
|
def adjust_group_notifications_task(instance, action, reverse, model, pk_set, using, *args, **kwargs):
|
||||||
|
|
||||||
# IF FALSE NO MAILS WILL BE SEND - IN PRODUCTIVITY CHANGE TO TRUE #
|
# IF FALSE NO MAILS WILL BE SEND - IN PRODUCTIVITY CHANGE TO TRUE #
|
||||||
GLOBALSENDMAILS = True
|
GLOBALSENDMAILS = True
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
{% load static %}
|
{% load static %}
|
||||||
|
{% load counter_tag %}
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="de">
|
<html lang="de">
|
||||||
<head>
|
<head>
|
||||||
|
|
@ -126,14 +127,14 @@
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if request.user.profile.agency.module_files %}
|
{% if request.user.profile.agency.module_files and request.user|usergperm:"filesviewer" %}
|
||||||
{% if active_link == 'cloud' %}
|
{% if active_link == 'cloud' %}
|
||||||
<li class="nav-item active">
|
<li class="nav-item active">
|
||||||
{% else%}
|
{% else%}
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
{%endif%}
|
{%endif%}
|
||||||
<a class="nav-link " href="{% url 'cloud-main' level='home' %}" aria-expanded="true">
|
<a class="nav-link " href="{% url 'cloud-main' level='home' %}" aria-expanded="true">
|
||||||
<i class="fas fa-cloud"></i>
|
<i class="fas fa-file"></i>
|
||||||
<span>Dateien</span>
|
<span>Dateien</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue