diff --git a/cloud/__pycache__/models.cpython-38.pyc b/cloud/__pycache__/models.cpython-38.pyc index 8da8345..1d819fd 100644 Binary files a/cloud/__pycache__/models.cpython-38.pyc and b/cloud/__pycache__/models.cpython-38.pyc differ diff --git a/cloud/models.py b/cloud/models.py index 8df113e..12cf7a5 100644 --- a/cloud/models.py +++ b/cloud/models.py @@ -8,7 +8,7 @@ from django.utils import timezone def user_directory_path(instance, filename): # file will be uploaded to MEDIA_ROOT/agency_/files// - return 'agency_{0}/files/{1}/{2}'.format(instance.agency.pk, instance.subdir, filename) + return 'agencydata/agency_{0}/files/{1}/{2}'.format(instance.agency.pk, instance.subdir, filename) class Data(models.Model): diff --git a/media/agency_2/FeedbackWPU10.txt b/media/agency_2/FeedbackWPU10.txt deleted file mode 100644 index bebf28b..0000000 --- a/media/agency_2/FeedbackWPU10.txt +++ /dev/null @@ -1,8 +0,0 @@ -3D-Druck -+ Gute Struktur -+ Shortucts -+ Planemodellierung - Als VIdeo noch ein - -HTML -- Erweiterten Kurs - diff --git a/media/agency_2/subdir1/subdir2/FeedbackWPU10.txt b/media/agency_2/subdir1/subdir2/FeedbackWPU10.txt deleted file mode 100644 index bebf28b..0000000 --- a/media/agency_2/subdir1/subdir2/FeedbackWPU10.txt +++ /dev/null @@ -1,8 +0,0 @@ -3D-Druck -+ Gute Struktur -+ Shortucts -+ Planemodellierung - Als VIdeo noch ein - -HTML -- Erweiterten Kurs - diff --git a/media/agency_2/subdir1/subdir2/FeedbackWPU10_Ry9eQsX.txt b/media/agency_2/subdir1/subdir2/FeedbackWPU10_Ry9eQsX.txt deleted file mode 100644 index bebf28b..0000000 --- a/media/agency_2/subdir1/subdir2/FeedbackWPU10_Ry9eQsX.txt +++ /dev/null @@ -1,8 +0,0 @@ -3D-Druck -+ Gute Struktur -+ Shortucts -+ Planemodellierung - Als VIdeo noch ein - -HTML -- Erweiterten Kurs - diff --git a/media/userprofilepics/default.jpg b/media/userprofilepics/default.jpg index 8648915..d471740 100644 Binary files a/media/userprofilepics/default.jpg and b/media/userprofilepics/default.jpg differ diff --git a/news/__pycache__/views.cpython-38.pyc b/news/__pycache__/views.cpython-38.pyc index 8b0d744..f8fd71b 100644 Binary files a/news/__pycache__/views.cpython-38.pyc and b/news/__pycache__/views.cpython-38.pyc differ diff --git a/news/templates/news/news_management.html b/news/templates/news/news_management.html index ed9b4c2..7a08a08 100644 --- a/news/templates/news/news_management.html +++ b/news/templates/news/news_management.html @@ -9,7 +9,7 @@


diff --git a/news/views.py b/news/views.py index bc261fb..c9c408e 100644 --- a/news/views.py +++ b/news/views.py @@ -21,7 +21,7 @@ class NewsManagement(LoginRequiredMixin, ListView): news = News.objects.filter(agency__pk=self.request.user.profile.agency.pk).filter(go_online_on__lt=filterdate).filter(go_offline_on__gt=filterdate).order_by('-created_date') news_arch = News.objects.filter(agency__pk=self.request.user.profile.agency.pk).filter(go_offline_on__lt=filterdate).order_by('-created_date') context = super().get_context_data(**kwargs) - context.update({'active_link' : 'newsmanagement', 'news' : news, 'news_arch' : news_arch}) + context.update({'active_link' : 'dashboard', 'news' : news, 'news_arch' : news_arch}) return context ''' class NewsAddNews(LoginRequiredMixin, CreateView): @@ -57,7 +57,7 @@ def NewsAdd(request): new_news.save() messages.success(request, f'News gespeichert!') - return redirect('news-management') + return redirect('users-dashboard') else: normalForm = NewsAddNews(instance=request.user) @@ -67,7 +67,7 @@ def NewsAdd(request): context = { 'normalForm' : normalForm, #'editorForm' : editorForm, - 'active_link' : 'newsmanagement' + 'active_link' : 'dashboard' } return render(request, 'news/news_addnews.html', context) @@ -98,7 +98,7 @@ def NewsUpdate(request, id): context = { 'normalForm' : normalForm, #'editorForm' : editorForm, - 'active_link' : 'newsmanagement', + 'active_link' : 'dashboard', 'news_id' : news.pk, } return render(request, 'news/news_update.html', context) @@ -118,7 +118,7 @@ class NewsDeleteView(LoginRequiredMixin, DeleteView): def NewsSingle(request, pk): news = News.objects.get(pk=pk) context = { - 'active_link':'newsmanagement', + 'active_link':'dashboard', 'news' : news } diff --git a/orga/__pycache__/views.cpython-38.pyc b/orga/__pycache__/views.cpython-38.pyc index f1cf44f..dc9bf9d 100644 Binary files a/orga/__pycache__/views.cpython-38.pyc and b/orga/__pycache__/views.cpython-38.pyc differ diff --git a/orga/views.py b/orga/views.py index e066fce..2e97410 100644 --- a/orga/views.py +++ b/orga/views.py @@ -17,9 +17,12 @@ def mainorga(request): # Check, if parented users are invisible. Remove them and give user an info! for ele in nonvisibleuser: for vis in agencyuser: - if vis.profile.parent.profile.pk == ele.pk: - agencyuser.remove(vis) - invisible_users += 1 + try: + if vis.profile.parent.profile.pk == ele.pk: + agencyuser.remove(vis) + invisible_users += 1 + except: + pass context = { 'active_link' : 'orga', diff --git a/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc b/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc index 89b03f7..321d86b 100644 Binary files a/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc and b/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc differ diff --git a/standards/templatetags/counter_tag.py b/standards/templatetags/counter_tag.py index 6cad104..f4884d3 100644 --- a/standards/templatetags/counter_tag.py +++ b/standards/templatetags/counter_tag.py @@ -1,5 +1,5 @@ from django import template -from django.contrib.auth.models import Group +from django.contrib.auth.models import Group, User from users.models import AgencyGroup register = template.Library() @@ -22,7 +22,7 @@ def incvar(): b += 1 return '' - + @register.filter(name='has_group') def has_group(user, group_name): group = Group.objects.get(name=group_name) @@ -45,6 +45,11 @@ def usergperm(user, perm): if user.has_perm('users.'+perm): stat = True return stat + +@register.filter(name="useringroupbyid") +def is_member(id, groupname): + usertocheck = User.objects.get(pk=id) + return usertocheck.groups.filter(name=groupname).exists() ''' class Counter: count = 0 diff --git a/users/__pycache__/admin.cpython-38.pyc b/users/__pycache__/admin.cpython-38.pyc index 9455fd4..2b0a3e7 100644 Binary files a/users/__pycache__/admin.cpython-38.pyc and b/users/__pycache__/admin.cpython-38.pyc differ diff --git a/users/__pycache__/models.cpython-38.pyc b/users/__pycache__/models.cpython-38.pyc index 9784006..99b664c 100644 Binary files a/users/__pycache__/models.cpython-38.pyc and b/users/__pycache__/models.cpython-38.pyc differ diff --git a/users/__pycache__/signals.cpython-38.pyc b/users/__pycache__/signals.cpython-38.pyc index b4d6f09..3a5da63 100644 Binary files a/users/__pycache__/signals.cpython-38.pyc and b/users/__pycache__/signals.cpython-38.pyc differ diff --git a/users/__pycache__/views.cpython-38.pyc b/users/__pycache__/views.cpython-38.pyc index c13658f..253c642 100644 Binary files a/users/__pycache__/views.cpython-38.pyc and b/users/__pycache__/views.cpython-38.pyc differ diff --git a/users/admin.py b/users/admin.py index 482ccba..e12db48 100644 --- a/users/admin.py +++ b/users/admin.py @@ -1,10 +1,11 @@ from django.contrib import admin -from .models import Profile, Agency, AgencyGroup +from .models import Profile, Agency, AgencyGroup, AgencyJob from .priomodel import Prio from django.contrib.auth.models import Permission admin.site.register(Permission) admin.site.register(Profile) admin.site.register(Agency) admin.site.register(AgencyGroup) +admin.site.register(AgencyJob) admin.site.register(Prio) diff --git a/users/models.py b/users/models.py index 97208ec..95aca19 100644 --- a/users/models.py +++ b/users/models.py @@ -1,5 +1,5 @@ from django.db import models -from django.contrib.auth.models import User, AbstractBaseUser +from django.contrib.auth.models import User, AbstractUser from django.conf import settings from PIL import Image from django.utils import timezone @@ -17,12 +17,11 @@ User._meta.get_field('last_name').blank = False # PATH FOR AGENCYPIC def picturepath_agency(instance, filename): # file will be uploaded to MEDIA_ROOT/agency_// - return 'agency_{0}/agencystats/{1}'.format(instance.pk, filename) + return 'agencydata/agency_{0}/agencystats/{1}'.format(instance.pk, filename) # PATH FOR PROFILEPICS def picturepath_user(instance, filename): - # file will be uploaded to MEDIA_ROOT/agency_// - return 'agency_{0}/agencystats/profilepics/{1}'.format(instance.pk, filename) + return 'agencydata/agency_{0}/agencystats/profilepics/{1}'.format(instance.agency.pk, filename) ''' Class Agency @@ -101,7 +100,7 @@ Klasse für die Zusatzinfos eines Nutzers. class Profile(models.Model): # Wenn der User gelöscht wird, wird auch das Profil gelöscht - user = models.OneToOneField(User, on_delete=models.CASCADE) + user = models.OneToOneField(User, on_delete=models.CASCADE, blank=True, null=True, default=None) parent = models.ForeignKey(User, on_delete=models.PROTECT, blank=True, null=True, related_name='parent_user') phoneland = models.CharField(max_length=60, blank=True) phonemobile = models.CharField(max_length=60, blank=True) @@ -165,11 +164,11 @@ class Profile(models.Model): ''' @property def get_photo_url(self): - if self.image and hasattr(self.image, 'url'): - return self.image.url - else: - return "/media/userprofilepics/default.jpg" - + if self.image and hasattr(self.image, 'url'): + return self.image.url + else: + return "/media/default.jpg" + @@ -184,9 +183,8 @@ class AgencyGroup(models.Model): agency = models.ForeignKey(Agency, on_delete=models.PROTECT) agencygroupname = models.CharField(max_length=60, blank=True) savefordel = models.BooleanField(default=False) - - # PERMISSIONS - Über alle Modelle hinweg, in der url.py wird dann die route verhindert! - + is_admin = models.BooleanField(default=False) + class Meta: permissions = [ @@ -199,4 +197,4 @@ class AgencyGroup(models.Model): ('modulenews', 'News bearbeiten und veröffentlichen'), ('modulesconfig', 'Module verwalten'), ('modulequicklinks', 'Quicklinks bearbeiten') - ] + ] \ No newline at end of file diff --git a/users/signals.py b/users/signals.py index 6f0bc10..7e6dc92 100644 --- a/users/signals.py +++ b/users/signals.py @@ -8,14 +8,15 @@ from notificsys.models import UserNotification from django.core.mail import send_mail from django.template.loader import render_to_string # SIGNALS FOR USER +''' @receiver(post_save, sender=User) -def create_profile(sender, instance, created, **kwargs): +def create_profile(sender, instance, created, **kwargs): + print(instance) if created: Profile.objects.create(user=instance, agency=instance.agency, parent=instance.parent) - ''' - Wenn ein neuer Nutzer angelegt wird und dies der erste der Agentur ist, - erhält dieser automatisch alle verfügbaren Rechte! - ''' + + #Wenn ein neuer Nutzer angelegt wird und dies der erste der Agentur ist, + #erhält dieser automatisch alle verfügbaren Rechte! user_agency = User.objects.filter(profile__agency__pk=instance.agency.pk) if len(user_agency) == 1: tempuser = user_agency[0] @@ -25,7 +26,7 @@ def create_profile(sender, instance, created, **kwargs): tempuser.user_permissions.add(tempperm) #tempuser.profile.func = 'lead' tempuser.save() - +''' @receiver(post_save, sender=User) def save_profile(sender, instance, **kwargs): instance.profile.save() diff --git a/users/templates/users/base.html b/users/templates/users/base.html index 43d95d0..0fde475 100644 --- a/users/templates/users/base.html +++ b/users/templates/users/base.html @@ -138,9 +138,6 @@ - - - {% if perms.users.users_usermanagement or perms.users.areas_management or perms.users.tasks_management or perms.user.news_management %} @@ -148,7 +145,7 @@ Agenturorga {%endif%} - + {% if perms.users.areas_management %} {% if active_link == 'areasmanagement' %} {%endif%} - + diff --git a/users/templates/users/dashboard.html b/users/templates/users/dashboard.html index 5f751fc..16c8e77 100644 --- a/users/templates/users/dashboard.html +++ b/users/templates/users/dashboard.html @@ -11,7 +11,13 @@ {% if request.user.profile.agency.module_news %}
-
News
+
News + {% if perms.users.modulenews %} + + + + {% endif %} +
diff --git a/users/views.py b/users/views.py index 3f9a9b4..b48aa17 100644 --- a/users/views.py +++ b/users/views.py @@ -68,7 +68,7 @@ def toUpdate(request): # VERWALTUNG temgroup_verwaltung = Group(name=str(request.user.profile.agency.pk) + "_" + randomString(8)) temgroup_verwaltung.save() - temgroup_verwaltung_ag = AgencyGroup(savefordel=True, group=temgroup_verwaltung, agency=request.user.profile.agency, agencygroupname="Verwaltung") + temgroup_verwaltung_ag = AgencyGroup(savefordel=True, is_admin=True, group=temgroup_verwaltung, agency=request.user.profile.agency, agencygroupname="Verwaltung") temgroup_verwaltung_ag.save() print("default groups created...adding users...") users_of_agency = User.objects.filter(profile__agency__pk=request.user.profile.agency.pk) @@ -83,8 +83,6 @@ def toUpdate(request): for p in perms: tempperm = Permission.objects.get(codename=p[0]) temgroup_verwaltung_ag.group.permissions.add(tempperm) - - print("default groups created and users added") else: print("default groups existing") @@ -175,23 +173,24 @@ class UsersManagement(LoginRequiredMixin, ListView): ''' class UsersCreateUser(LoginRequiredMixin, CreateView): model = User - fields = ['first_name', 'last_name','username', 'email'] - success_url = '/dashboard/usersman/' + fields = ['first_name', 'last_name', 'email'] + success_url = '/settings/newuser/s2/' # Adding active_link def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) - context.update({'active_link' : 'usersmanagement'}) + context.update({'active_link' : 'settings'}) return context def form_valid(self, form): # Send message to the site - messages.success(self.request, f'Benutzer angelegt!') + messages.success(self.request, f'Neuer Mitarbeiter angelegt!') # SAVE OBJECTS TO SIGNALE! form.instance.agency = self.request.user.profile.agency form.instance.parent = None newuser_name = form.cleaned_data.get('first_name') + " " + form.cleaned_data.get('last_name') msg_html = render_to_string('users/newusers_email.html', {'username': newuser_name}) + ''' if(self.request.POST.get("sendmailnewuser")): send_mail( self.request.user.profile.agency.name + ' Account', @@ -201,6 +200,7 @@ class UsersCreateUser(LoginRequiredMixin, CreateView): html_message=msg_html, fail_silently=False, ) + ''' return super().form_valid(form) # USER muss eingeloggt sein, um diese Seite zu sehen @@ -346,7 +346,7 @@ def setuserparent(request): ''' class ProfileDeleteView(LoginRequiredMixin, DeleteView): model = User - success_url = '/dashboard/usersman' + success_url = '/dasettings/main' template_name = 'users/user_confirm_delete.html'