This commit is contained in:
holger.trampe 2020-01-05 13:31:08 +01:00
parent 94abc6b481
commit 686a8fe6f1
38 changed files with 919 additions and 124 deletions

View File

@ -17,7 +17,7 @@
<input class="form-control" id="tableSearch" size="50" type="text" placeholder="Suche in Tabelle...">
</div>
<div class="table-responsive">
<table class="table table-hover">
<table class="table table-hover" id="areas_maintable">
<thead>
<tr>
<th scope="col">Name</th>
@ -57,11 +57,16 @@
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
$(document).ready(function(){
/*$('#areas_maintable').DataTable();*/
$("#tableSearch").on("keyup", function() {
var value = $(this).val().toLowerCase();
$("#tableresults tr").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
});
});

View File

@ -40,7 +40,7 @@ INSTALLED_APPS = [
'standards.apps.StandardsConfig',
'news.apps.NewsConfig',
'crispy_forms',
'colorful',
'colorful',
'ckeditor',
'django_summernote',
'ckeditor_uploader',
@ -50,7 +50,7 @@ INSTALLED_APPS = [
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bootstrap_datepicker_plus',
'bootstrap_datepicker_plus'
]
MIDDLEWARE = [

View File

@ -2,25 +2,27 @@ from django.db import models
from django.contrib.auth.models import User
from users.models import Agency
from django.urls import reverse
import datetime
from datetime import datetime, timedelta
#from ckeditor_uploader.fields import RichTextUploadingField
from bootstrap_datepicker_plus import DatePickerInput
from django.utils import timezone
class News(models.Model):
agency = models.ForeignKey(Agency, on_delete=models.CASCADE)
name = models.CharField(max_length=200, blank=False, default="")
#content = RichTextUploadingField(blank=True, verbose_name='Inhalt')
content = models.TextField(blank=True, verbose_name='Inhalt')
content = models.TextField(blank=True, verbose_name='Inhalt', default="")
created_by = models.ForeignKey(User, on_delete=models.PROTECT)
created_date = models.DateTimeField(default=datetime.datetime.now(), blank=True)
created_date = models.DateTimeField(default=timezone.now, blank=True)
go_online_on = models.DateTimeField(default=datetime.datetime.now(), blank=True)
go_offline_on = models.DateTimeField(default=datetime.datetime.now(), blank=True)
go_online_on = models.DateTimeField(default=timezone.now, blank=True)
# Default date plus two weeks
go_offline_on = models.DateTimeField(default=timezone.now()+timedelta(days=14), blank=True)
last_modified_by = models.ForeignKey(User, on_delete=models.PROTECT, related_name='news_mod_by', default=None)
last_modified_on = models.DateTimeField(default=datetime.datetime.now(), blank=True)
last_modified_on = models.DateTimeField(default=timezone.now, blank=True)
def __str__(self):
return f'{self.name}'

View File

@ -7,7 +7,9 @@
Hier können aktuelle Nachrichten für die Agentur erstellt und verwaltet werden.
</p>
<div class="row">
<div class="content-section col-4">
<a class="btn btn-primary" href="{% url 'news-add' %} ">News anlegen</a>
</div>
</div>
<hr>
<div class="row">

View File

@ -3,8 +3,7 @@ from django.forms import ModelForm
from .models import Standards
from areas.models import Areas
from tasks.models import Tasks
#from ckeditor.widgets import CKEditorWidget
from django_summernote.widgets import SummernoteInplaceWidget
@ -12,6 +11,9 @@ class StandardAddStandard(forms.ModelForm):
class Meta:
model =Standards
widgets = {
'content': SummernoteInplaceWidget(),
}
labels = {
"name" : "Titel",
"area" : "Übergeordneter Bereich",
@ -46,11 +48,12 @@ class StandardAddStandard(forms.ModelForm):
class StandardAddStandardEditor(forms.ModelForm):
#content = forms.CharField(widget=CKEditorWidget())
class Meta:
model = Standards
widgets = {
'content': SummernoteInplaceWidget(),
}
labels = {
"content" : "Inhalt"
}
@ -60,6 +63,9 @@ class StandardUpdateStandard(forms.ModelForm):
class Meta:
model =Standards
widgets = {
'content': SummernoteInplaceWidget()
}
labels = {
"name" : "Titel",
"area" : "Übergeordneter Bereich",
@ -96,11 +102,12 @@ class StandardUpdateStandard(forms.ModelForm):
class StandardUpdateStandardEditor(forms.ModelForm):
#content = forms.CharField(widget=CKEditorWidget())
class Meta:
model = Standards
widgets = {
'content': SummernoteInplaceWidget()
}
labels = {
"content" : "Inhalt"
}

View File

@ -15,16 +15,17 @@ class Standards(models.Model):
task = models.ForeignKey(Tasks, on_delete=models.CASCADE)
name = models.CharField(max_length=200, blank=False, default="")
#content = RichTextUploadingField(blank=True, verbose_name='Inhalt')
content = models.TextField(blank=True, verbose_name='Inhalt')
content = models.TextField(blank=True, verbose_name='Inhalt', default="")
#content = models.CharField(max_length=200000, blank=True, verbose_name='Inhalt')
created_standard_by = models.ForeignKey(User, on_delete=models.PROTECT)
created_standard_date = models.DateTimeField(default=datetime.datetime.now(), blank=True)
created_standard_date = models.DateTimeField(default=timezone.now, blank=True)
published_by = models.ForeignKey(User, on_delete=models.PROTECT, related_name='user_published_standard', default=None)
published_on = models.DateTimeField(default=datetime.datetime.now(), blank=True)
published_on = models.DateTimeField(default=timezone.now, blank=True)
last_modified_by = models.ForeignKey(User, on_delete=models.PROTECT, related_name='user_modified_standard', default=None)
last_modified_on = models.DateTimeField(default=datetime.datetime.now(), blank=True)
last_modified_on = models.DateTimeField(default=timezone.now, blank=True)
public = models.BooleanField(default=False)

View File

@ -48,19 +48,7 @@
</tr>
{% endif %}
{% endfor %}
</table>
</table>
</div>
</div>
{% endblock content %}

View File

@ -29,10 +29,21 @@ $("#id_area").change(function () {
}
});
});
$(document).ready(function() {
$('#id_content').summernote({
height: 400
});
});
</script>
{% if not perms.users.standard_management %}
<script type="text/javascript">
$("#div_id_public").hide();
</script>
{% endif %}
{% endblock content %}

View File

@ -25,7 +25,12 @@
{% endfor %}
<li class="nav-item">
<a class="nav-link" id="userown" data-toggle="tab" href="#t_userown" role="tab" aria-controls="t_userown" aria-selected="false">Eigene Standards</a>
</li>
</li>
{% if perms.users.standard_management %}
<li class="nav-item">
<a class="nav-link" id="agencys" data-toggle="tab" href="#t_agencys" role="tab" aria-controls="t_agencys" aria-selected="false">Unveröffentlichte Standards</a>
</li>
{% endif %}
</ul>
</div>
<div class="col">
@ -117,6 +122,59 @@
</div>
</div>
<div class="tab-pane fade" id="t_agencys" role="tabpanel" aria-labelledby="userown">
<h4 class="mt-4 mb-4">Unveröffentlichte Standards</h4>
<div class="form-group mb-2">
<input class="form-control" id="tableSearch_s" size="20" type="text" placeholder="Suche in Tabelle...">
</div>
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th scope="col">Titel</th>
<th scope="col">Erstellt am</th>
<th scope="col">Geändert von</th>
<th scope="col">Geändert am</th>
<th scope="col">Öffentlichkeitsstatus</th>
<th scope="col">&nbsp;</th>
</tr>
</thead>
<tbody id="tableresults_s">
{% for standard in unpubstandards_of_user %}
<tr>
<td><a href="{% url 'standard-single' standard.pk %}">{{standard.name}}</a></td>
<td>{{standard.created_standard_date|date:"d.m.Y, H:i"}}</td>
<td>{{standard.last_modified_by.first_name}} {{standard.last_modified_by.last_name}}</td>
<td>{{standard.last_modified_on|date:"d.m.Y, H:i"}}</td>
<td>{{standard.public|yesno:"Öffentlich,Nicht öffentlich"}}</td>
<td>
<div class="dropdown no-arrow">
<a class="dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fas fa-ellipsis-v fa-sm fa-fw text-gray-400"></i>
</a>
<div class="dropdown-menu dropdown-menu-right shadow animated--fade-in" aria-labelledby="dropdownMenuLink">
{% if perms.users.standard_management %}
{% if standard.public %}
<a class="dropdown-item" href="{% url 'standard-status' standard.pk %}">Veröffentlichung aufheben</a>
{% else %}
<a class="dropdown-item" href="{% url 'standard-status' standard.pk %}">Veröffentlichen</a>
{% endif %}
{% endif %}
{% if standard.created_standard_by == request.user or perms.users.standard_management %}
<a class="dropdown-item" href="{% url 'standard-update' standard.pk %}">Bearbeiten</a>
{% endif %}
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="{% url 'standard-delete' standard.pk %}" >Löschen</a>
</div>
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
@ -129,8 +187,15 @@
$("#tableresults tr").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
});
});
})
});
$("#tableSearch_s").on("keyup", function() {
var value = $(this).val().toLowerCase();
$("#tableresults_s tr").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
});
});
})
$('#area_tabs a').on('click', function (e) {

View File

@ -38,10 +38,12 @@ $("#id_area").change(function () {
}
});
});
$(document).ready(function() {
$('#id_content').summernote({
height: 400
});
});
</script>
{% endblock content %}

View File

@ -23,11 +23,11 @@ class StandardsManagement(LoginRequiredMixin, ListView):
areas = Areas.objects.filter(agency__pk=self.request.user.profile.agency.pk)
standards_of_user = Standards.objects.filter(agency__pk=self.request.user.profile.agency.pk, created_standard_by=self.request.user.pk)
standards_of_agency = Standards.objects.filter(agency__pk=self.request.user.profile.agency.pk)
unpubstandards_of_user = Standards.objects.filter(agency__pk=self.request.user.profile.agency.pk, public=False)
tasks = Tasks.objects.filter(agency__pk=self.request.user.profile.agency.pk)
context.update({'active_link' : 'standards', 'tasks': tasks, 'standards_of_agency' : standards_of_agency, 'areas' : areas, 'standards_of_user' : standards_of_user})
context.update({'active_link' : 'standards', 'tasks': tasks, 'unpubstandards_of_user' : unpubstandards_of_user, 'standards_of_agency' : standards_of_agency, 'areas' : areas, 'standards_of_user' : standards_of_user})
return context
@login_required
def StandardAdd(request):
if request.method == 'POST':

View File

@ -32,6 +32,12 @@
<link href="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.12/summernote.css" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.12/summernote.js"></script>
<!-- TABLE SORT -->
<!--<link rel="stylesheet" href="https://cdn.datatables.net/1.10.20/css/jquery.dataTables.min.css">-->
</head>
<body id="page-top">
<!-- Page Wrapper -->
@ -187,7 +193,11 @@
<button class="rounded-circle border-0" id="sidebarToggle"></button>
</div>
<div style="bottom: 10px; position: absolute;" class="sidebar-heading">
Version 0.7.2
Version 0.7.3
</div>
<div style="bottom: 40px; position: absolute;" class="sidebar-heading">
<a href="{% url 'datenschutzda' %}">Datenschutz</a><br />
<a href="{% url 'impressumda' %}">Impressum</a>
</div>
</ul>
<!-- End of Sidebar -->
@ -321,6 +331,9 @@
<!-- CUSTOM FONT -->
<link href="{% static 'users/css/custom.css' %}" rel="stylesheet">
<!-- TABLE SORT -->
<!--<script src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>-->
<!-- Page level plugins -->
<!--<script src="vendor/chart.js/Chart.min.js"></script>-->

View File

@ -37,8 +37,6 @@
<img width="100%" src="{{ request.user.profile.agency.get_photo_url }}">
</div>
</div>
<div class="card d-block mb-3" style="width: 96%">
<div class="card-body">
<h5 class="card-title">Neueste Standards</h5>

View File

@ -0,0 +1,9 @@
{% extends "users/base.html" %}
{% block content %}
<div class="content-section col-md-5">
<h1>Datenschutz</h1>
{% block datenschutz_content %}
{% include "users/datenschutz_content.html" %}
{% endblock %}
</div>
{% endblock %}

View File

@ -0,0 +1 @@
<p>TODO Datenschutz Content</p>

View File

@ -0,0 +1,9 @@
{% extends "users/publicbase.html" %}
{% block content %}
<div class="content-section col-md-5">
<h1>Datenschutz</h1>
{% block datenschutz_content %}
{% include "users/datenschutz_content.html" %}
{% endblock %}
</div>
{% endblock content %}

View File

@ -0,0 +1,9 @@
{% extends "users/base.html" %}
{% block content %}
<div class="content-section col-md-5">
<h1>Impressum</h1>
{% block impressum_content %}
{% include "users/impressum_content.html" %}
{% endblock %}
</div>
{% endblock content %}

View File

@ -0,0 +1 @@
<p>TODO Impressum Content</p>

View File

@ -0,0 +1,9 @@
{% extends "users/publicbase.html" %}
{% block content %}
<div class="content-section col-md-5">
<h1>Impressum</h1>
{% block impressum_content %}
{% include "users/impressum_content.html" %}
{% endblock %}
</div>
{% endblock content %}

View File

@ -1,29 +1,184 @@
{% load i18n %}{% autoescape off %}
<html>
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
<head>
<link href='https://fonts.googleapis.com/css?family=Roboto&display=swap' rel='stylesheet' type='text/css'>
<style>
html {font-family: 'Roboto' !important;}html h6 {font-family: 'Roboto' !important;font-size: 1.0em;}html h5 {font-family: 'Roboto' !important;font-size: 1.1em;}html h4 {font-family: 'Roboto' !important;font-size: 1.3em;}html h3 {font-family: 'Roboto' !important;font-size: 1.5em;}html h2 {font-family: 'Roboto' !important;font-size: 1.7em;}html h1 {font-family: 'Roboto' !important;font-size: 2em;}body p{font-family: 'Roboto' !important;font-size: 0.9; color: #000000;}
</style>
<title> </title>
<!--[if !mso]><!-- -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!--<![endif]-->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type="text/css">
#outlook a {
padding: 0;
}
body {
margin: 0;
padding: 0;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
table,
td {
border-collapse: collapse;
mso-table-lspace: 0pt;
mso-table-rspace: 0pt;
}
img {
border: 0;
height: auto;
line-height: 100%;
outline: none;
text-decoration: none;
-ms-interpolation-mode: bicubic;
}
p {
display: block;
margin: 13px 0;
}
</style>
<!--[if mso]>
<xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml>
<![endif]-->
<!--[if lte mso 11]>
<style type="text/css">
.mj-outlook-group-fix { width:100% !important; }
</style>
<![endif]-->
<!--[if !mso]><!-->
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700" rel="stylesheet" type="text/css">
<style type="text/css">
@import url(https://fonts.googleapis.com/css?family=Roboto:300,400,500,700);
</style>
<!--<![endif]-->
<style type="text/css">
@media only screen and (min-width:480px) {
.mj-column-per-100 {
width: 100% !important;
max-width: 100%;
}
}
</style>
<style type="text/css">
</style>
</head>
<body>
<h3>Digitale Agentur | Account</h3>
<hr>
<p>
Hallo {{username}},<br /><br />
für Sie wurde ein Account in der Agentur <b>{{user.profile.agency.name}}</b> erstellt. Bitte gehen Sie auf folgenden Link, um ein Passwort zu erstellen:
<p>
<a href="https://digitale-agentur.com/password-reset">https://digitale-agentur.com/password-reset</a>
</p>
Weitere Informationen erhalten Sie von Ihrem Agenturleiter.
</p>
<p>
Vielen Dank, dass Sie die Plattform <b>Digitale Agentur</b> nutzen!
<br /><br />
Mit freundlichen Grüßen
<br /><br />
Ihr Team von Digitale Agentur
</p>
<div style="">
<!--[if mso | IE]>
<table
align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600"
>
<tr>
<td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;">
<![endif]-->
<div style="margin:0px auto;max-width:600px;">
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%;">
<tbody>
<tr>
<td style="direction:ltr;font-size:0px;padding:20px 0;text-align:center;">
<!--[if mso | IE]>
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td
class="" style="vertical-align:top;width:600px;"
>
<![endif]-->
<div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;" width="100%">
<tr>
<td style="font-size:0px;padding:10px 25px;word-break:break-word;">
<p style="border-top:solid 4px #5a5c69;font-size:1;margin:0px auto;width:100%;"> </p>
<!--[if mso | IE]>
<table
align="center" border="0" cellpadding="0" cellspacing="0" style="border-top:solid 4px #5a5c69;font-size:1;margin:0px auto;width:550px;" role="presentation" width="550px"
>
<tr>
<td style="height:0;line-height:0;">
&nbsp;
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
<tr>
<td align="left" style="font-size:0px;padding:10px 25px;word-break:break-word;">
<div style="font-family:Roboto;font-size:20px;line-height:1;text-align:left;color:#000000;">
<h2>Digitale Agentur | Account</h2>
</div>
</td>
</tr>
</table>
</div>
<!--[if mso | IE]>
</td>
<td
class="" style="vertical-align:top;width:600px;"
>
<![endif]-->
<div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;" width="100%">
<tr>
<td align="left" style="font-size:0px;padding:10px 25px;word-break:break-word;">
<div style="font-family:Roboto;font-size:18px;line-height:1;text-align:left;color:#000000;">
<p>Hallo {{username}},</p>
<p>für Sie wurde ein Account in der Agentur <b>{{user.profile.agency.name}}</b> erstellt. Bitte gehen Sie auf folgenden Link, um ein Passwort zu erstellen:</p>
<p><a href="https://digitale-agentur.com/password-reset">https://digitale-agentur.com/password-reset</a></p>
<p>Weitere Informationen erhalten Sie von Ihrem Agenturleiter. Vielen Dank, dass Sie die Plattform <b>Digitale Agentur</b> nutzen!</p>
<p>Mit freundlichen Grüßen</p>
<p>Ihr Team von Digitale Agentur</p>
</div>
</td>
</tr>
<tr>
<td style="font-size:0px;padding:10px 25px;word-break:break-word;">
<p style="border-top:solid 4px #5a5c69;font-size:1;margin:0px auto;width:100%;"> </p>
<!--[if mso | IE]>
<table
align="center" border="0" cellpadding="0" cellspacing="0" style="border-top:solid 4px #5a5c69;font-size:1;margin:0px auto;width:550px;" role="presentation" width="550px"
>
<tr>
<td style="height:0;line-height:0;">
&nbsp;
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
</table>
</div>
<!--[if mso | IE]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
</tbody>
</table>
</div>
<!--[if mso | IE]>
</td>
</tr>
</table>
<![endif]-->
</div>
</body>
</html>
{% endautoescape %}
</html>

View File

@ -0,0 +1,28 @@
{% load mjml %}
{% mjml %}
<mjml>
<mj-body>
<mj-section>
<mj-column width="100%">
<mj-divider border-color="#5a5c69"></mj-divider>
<mj-text font-size="20px" font-family="Roboto"><h2>Digitale Agentur | Account</h2></mj-text>
</mj-column>
<mj-column width="100%">
<mj-text font-size="18px" font-family="Roboto">
<p>Hallo {{username}},</p>
<p>für Sie wurde ein Account in der Agentur <b>{{user.profile.agency.name}}</b> erstellt. Bitte gehen Sie auf folgenden Link, um ein Passwort zu erstellen:</p>
<p><a href="https://digitale-agentur.com/password-reset">https://digitale-agentur.com/password-reset</a></p>
<p>Weitere Informationen erhalten Sie von Ihrem Agenturleiter. Vielen Dank, dass Sie die Plattform <b>Digitale Agentur</b> nutzen!</p>
<p>Mit freundlichen Grüßen</p>
<p>Ihr Team von Digitale Agentur</p>
</mj-text>
<mj-divider border-color="#5a5c69"></mj-divider>
</mj-column>
</mj-section>
</mj-body>
</mjml>
{% endmjml %}

View File

@ -0,0 +1,29 @@
{% load i18n %}{% autoescape off %}
<html>
<head>
<link href='https://fonts.googleapis.com/css?family=Roboto&display=swap' rel='stylesheet' type='text/css'>
<style>
html {font-family: 'Roboto' !important;}html h6 {font-family: 'Roboto' !important;font-size: 1.0em;}html h5 {font-family: 'Roboto' !important;font-size: 1.1em;}html h4 {font-family: 'Roboto' !important;font-size: 1.3em;}html h3 {font-family: 'Roboto' !important;font-size: 1.5em;}html h2 {font-family: 'Roboto' !important;font-size: 1.7em;}html h1 {font-family: 'Roboto' !important;font-size: 2em;}body p{font-family: 'Roboto' !important;font-size: 0.9; color: #000000;}
</style>
</head>
<body>
<h3>Digitale Agentur | Account</h3>
<hr>
<p>
Hallo {{username}},<br /><br />
für Sie wurde ein Account in der Agentur <b>{{user.profile.agency.name}}</b> erstellt. Bitte gehen Sie auf folgenden Link, um ein Passwort zu erstellen:
<p>
<a href="https://digitale-agentur.com/password-reset">https://digitale-agentur.com/password-reset</a>
</p>
Weitere Informationen erhalten Sie von Ihrem Agenturleiter.
</p>
<p>
Vielen Dank, dass Sie die Plattform <b>Digitale Agentur</b> nutzen!
<br /><br />
Mit freundlichen Grüßen
<br /><br />
Ihr Team von Digitale Agentur
</p>
</body>
</html>
{% endautoescape %}

View File

@ -1,32 +1,187 @@
{% load i18n %}{% autoescape off %}
<html>
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
<head>
<link href='https://fonts.googleapis.com/css?family=Roboto&display=swap' rel='stylesheet' type='text/css'>
<style>
html {font-family: 'Roboto' !important;}html h6 {font-family: 'Roboto' !important;font-size: 1.0em;}html h5 {font-family: 'Roboto' !important;font-size: 1.1em;}html h4 {font-family: 'Roboto' !important;font-size: 1.3em;}html h3 {font-family: 'Roboto' !important;font-size: 1.5em;}html h2 {font-family: 'Roboto' !important;font-size: 1.7em;}html h1 {font-family: 'Roboto' !important;font-size: 2em;}body p{font-family: 'Roboto' !important;font-size: 0.9; color: #000000;}
</style>
<title> </title>
<!--[if !mso]><!-- -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!--<![endif]-->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type="text/css">
#outlook a {
padding: 0;
}
body {
margin: 0;
padding: 0;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
table,
td {
border-collapse: collapse;
mso-table-lspace: 0pt;
mso-table-rspace: 0pt;
}
img {
border: 0;
height: auto;
line-height: 100%;
outline: none;
text-decoration: none;
-ms-interpolation-mode: bicubic;
}
p {
display: block;
margin: 13px 0;
}
</style>
<!--[if mso]>
<xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml>
<![endif]-->
<!--[if lte mso 11]>
<style type="text/css">
.mj-outlook-group-fix { width:100% !important; }
</style>
<![endif]-->
<!--[if !mso]><!-->
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700" rel="stylesheet" type="text/css">
<style type="text/css">
@import url(https://fonts.googleapis.com/css?family=Roboto:300,400,500,700);
</style>
<!--<![endif]-->
<style type="text/css">
@media only screen and (min-width:480px) {
.mj-column-per-100 {
width: 100% !important;
max-width: 100%;
}
}
</style>
<style type="text/css">
</style>
</head>
<body>
<h3>Digitale Agentur | Passwort vergessen</h3>
<hr>
<p>
Hallo {{user.first_name}} {{user.last_name}},<br /><br />
Sie haben ein neues Passwort für den Zugang ihrer Agentur <b>{{user.profile.agency.name}}</b> angefordert. Bitte gehen Sie auf folgenden Link, um ein Passwort zu erstellen:
<p>
{% block reset_link %}
<h4><a href="{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}">{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}</a></h4>
{% endblock %}
<h4>Ihr Benutzername: {{ user.get_username }}</h4>
</p>
Sollten Sie kein Passwort angefordert haben, ignorieren Sie diese E-Mail.
</p>
<p>
Vielen Dank, dass Sie die Plattform <b>Digitale Agentur</b> nutzen!
<br /><br />
Mit freundlichen Grüßen
<br /><br />
Ihr Team von Digitale Agentur
</p>
<div style="">
<!--[if mso | IE]>
<table
align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600"
>
<tr>
<td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;">
<![endif]-->
<div style="margin:0px auto;max-width:600px;">
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%;">
<tbody>
<tr>
<td style="direction:ltr;font-size:0px;padding:20px 0;text-align:center;">
<!--[if mso | IE]>
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td
class="" style="vertical-align:top;width:600px;"
>
<![endif]-->
<div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;" width="100%">
<tr>
<td style="font-size:0px;padding:10px 25px;word-break:break-word;">
<p style="border-top:solid 4px #5a5c69;font-size:1;margin:0px auto;width:100%;"> </p>
<!--[if mso | IE]>
<table
align="center" border="0" cellpadding="0" cellspacing="0" style="border-top:solid 4px #5a5c69;font-size:1;margin:0px auto;width:550px;" role="presentation" width="550px"
>
<tr>
<td style="height:0;line-height:0;">
&nbsp;
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
<tr>
<td align="left" style="font-size:0px;padding:10px 25px;word-break:break-word;">
<div style="font-family:Roboto;font-size:20px;line-height:1;text-align:left;color:#000000;">
<h2>Digitale Agentur | Passwort vergessen</h2>
</div>
</td>
</tr>
</table>
</div>
<!--[if mso | IE]>
</td>
<td
class="" style="vertical-align:top;width:600px;"
>
<![endif]-->
<div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;" width="100%">
<tr>
<td align="left" style="font-size:0px;padding:10px 25px;word-break:break-word;">
<div style="font-family:Roboto;font-size:18px;line-height:1;text-align:left;color:#000000;">
<p>Hallo {{user.first_name}} {{user.last_name}},</p> Sie haben ein neues Passwort für den Zugang ihrer Agentur <b>{{user.profile.agency.name}}</b> angefordert. Bitte gehen Sie auf folgenden Link, um ein Passwort zu erstellen:
<p>
{% block reset_link %}
<h4><a href="{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}">{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}</a></h4> {% endblock %}
<h4>Ihr Benutzername: {{ user.get_username }}</h4>
</p> Sollten Sie kein Passwort angefordert haben, ignorieren Sie diese E-Mail.
<p>Weitere Informationen erhalten Sie von Ihrem Agenturleiter. Vielen Dank, dass Sie die Plattform <b>Digitale Agentur</b> nutzen!</p>
<p>Mit freundlichen Grüßen</p>
<p>Ihr Team von Digitale Agentur</p>
</div>
</td>
</tr>
<tr>
<td style="font-size:0px;padding:10px 25px;word-break:break-word;">
<p style="border-top:solid 4px #5a5c69;font-size:1;margin:0px auto;width:100%;"> </p>
<!--[if mso | IE]>
<table
align="center" border="0" cellpadding="0" cellspacing="0" style="border-top:solid 4px #5a5c69;font-size:1;margin:0px auto;width:550px;" role="presentation" width="550px"
>
<tr>
<td style="height:0;line-height:0;">
&nbsp;
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
</table>
</div>
<!--[if mso | IE]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
</tbody>
</table>
</div>
<!--[if mso | IE]>
</td>
</tr>
</table>
<![endif]-->
</div>
</body>
</html>
{% endautoescape %}
</html>

View File

@ -0,0 +1,30 @@
{% load mjml %}
{% mjml %}
<mjml>
<mj-body>
<mj-section>
<mj-column width="100%">
<mj-divider border-color="#5a5c69"></mj-divider>
<mj-text font-size="20px" font-family="Roboto"><h2>Digitale Agentur | Passwort vergessen</h2></mj-text>
</mj-column>
<mj-column width="100%">
<mj-text font-size="18px" font-family="Roboto">
<p>Hallo {{user.first_name}} {{user.last_name}},</p>
Sie haben ein neues Passwort für den Zugang ihrer Agentur <b>{{user.profile.agency.name}}</b> angefordert. Bitte gehen Sie auf folgenden Link, um ein Passwort zu erstellen:
<p>
{% block reset_link %}
<h4><a href="{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}">{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}</a></h4>
{% endblock %}
<h4>Ihr Benutzername: {{ user.get_username }}</h4>
</p>
Sollten Sie kein Passwort angefordert haben, ignorieren Sie diese E-Mail.
<p>Weitere Informationen erhalten Sie von Ihrem Agenturleiter. Vielen Dank, dass Sie die Plattform <b>Digitale Agentur</b> nutzen!</p>
<p>Mit freundlichen Grüßen</p>
<p>Ihr Team von Digitale Agentur</p>
</mj-text>
<mj-divider border-color="#5a5c69"></mj-divider>
</mj-column>
</mj-section>
</mj-body>
</mjml>
{% endmjml %}

View File

@ -0,0 +1,32 @@
{% load i18n %}{% autoescape off %}
<html>
<head>
<link href='https://fonts.googleapis.com/css?family=Roboto&display=swap' rel='stylesheet' type='text/css'>
<style>
html {font-family: 'Roboto' !important;}html h6 {font-family: 'Roboto' !important;font-size: 1.0em;}html h5 {font-family: 'Roboto' !important;font-size: 1.1em;}html h4 {font-family: 'Roboto' !important;font-size: 1.3em;}html h3 {font-family: 'Roboto' !important;font-size: 1.5em;}html h2 {font-family: 'Roboto' !important;font-size: 1.7em;}html h1 {font-family: 'Roboto' !important;font-size: 2em;}body p{font-family: 'Roboto' !important;font-size: 0.9; color: #000000;}
</style>
</head>
<body>
<h3>Digitale Agentur | Passwort vergessen</h3>
<hr>
<p>
Hallo {{user.first_name}} {{user.last_name}},<br /><br />
Sie haben ein neues Passwort für den Zugang ihrer Agentur <b>{{user.profile.agency.name}}</b> angefordert. Bitte gehen Sie auf folgenden Link, um ein Passwort zu erstellen:
<p>
{% block reset_link %}
<h4><a href="{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}">{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}</a></h4>
{% endblock %}
<h4>Ihr Benutzername: {{ user.get_username }}</h4>
</p>
Sollten Sie kein Passwort angefordert haben, ignorieren Sie diese E-Mail.
</p>
<p>
Vielen Dank, dass Sie die Plattform <b>Digitale Agentur</b> nutzen!
<br /><br />
Mit freundlichen Grüßen
<br /><br />
Ihr Team von Digitale Agentur
</p>
</body>
</html>
{% endautoescape %}

View File

@ -44,6 +44,13 @@
<!-- Divider -->
<hr class="sidebar-divider my-0">
<div style="bottom: 10px; position: absolute;" class="sidebar-heading">
Version 0.7.3
</div>
<div style="bottom: 40px; position: absolute;" class="sidebar-heading">
<a href="{% url 'datenschutzda' %}">Datenschutz</a><br />
<a href="{% url 'impressumda' %}">Impressum</a>
</div>
</ul>
<!-- End of Sidebar -->
@ -55,7 +62,6 @@
<!-- Begin Page Content -->
<div class="container-fluid mt-4">
{% block content %}
{% endblock %}
</div>

View File

@ -1,31 +1,183 @@
{% load i18n %}{% autoescape off %}
<html>
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
<head>
<link href='https://fonts.googleapis.com/css?family=Roboto&display=swap' rel='stylesheet' type='text/css'>
<style>
html {font-family: 'Roboto' !important;}html h6 {font-family: 'Roboto' !important;font-size: 1.0em;}html h5 {font-family: 'Roboto' !important;font-size: 1.1em;}html h4 {font-family: 'Roboto' !important;font-size: 1.3em;}html h3 {font-family: 'Roboto' !important;font-size: 1.5em;}html h2 {font-family: 'Roboto' !important;font-size: 1.7em;}html h1 {font-family: 'Roboto' !important;font-size: 2em;}body p{font-family: 'Roboto' !important;font-size: 0.9; color: #000000;}
</style>
<title> </title>
<!--[if !mso]><!-- -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!--<![endif]-->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type="text/css">
#outlook a {
padding: 0;
}
body {
margin: 0;
padding: 0;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
table,
td {
border-collapse: collapse;
mso-table-lspace: 0pt;
mso-table-rspace: 0pt;
}
img {
border: 0;
height: auto;
line-height: 100%;
outline: none;
text-decoration: none;
-ms-interpolation-mode: bicubic;
}
p {
display: block;
margin: 13px 0;
}
</style>
<!--[if mso]>
<xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml>
<![endif]-->
<!--[if lte mso 11]>
<style type="text/css">
.mj-outlook-group-fix { width:100% !important; }
</style>
<![endif]-->
<!--[if !mso]><!-->
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700" rel="stylesheet" type="text/css">
<style type="text/css">
@import url(https://fonts.googleapis.com/css?family=Roboto:300,400,500,700);
</style>
<!--<![endif]-->
<style type="text/css">
@media only screen and (min-width:480px) {
.mj-column-per-100 {
width: 100% !important;
max-width: 100%;
}
}
</style>
<style type="text/css">
</style>
</head>
<body>
<h3>Digitale Agentur Registrierung</h3>
<p>
Hallo {{username}},<br />
Ihre Agentur wurde erstellt. Sie können sich nun hier anmelden und ihre Agentur gestalten:
<p>
<a href="https://digitale-agentur.com">https://digitale-agentur.com</a>
</p>
<br />
Ihr Benutzername: {{ username_log }}
<br />
Weitere Informationen erhalten Sie in unserem Wiki <a href="https://wiki.digitale-agentur.com/">https://wiki.digitale-agentur.com/</a> oder per E-Mail an support@digitale-agentur.com!
</p>
<p>
Vielen Dank, dass Sie die Plattform <i>Digitale Agentur</i> nutzen!
<br />
Mit freundlichen Grüßen
<br /><br />
Ihr Team von Digitale Agentur
</p>
<div style="">
<!--[if mso | IE]>
<table
align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600"
>
<tr>
<td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;">
<![endif]-->
<div style="margin:0px auto;max-width:600px;">
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%;">
<tbody>
<tr>
<td style="direction:ltr;font-size:0px;padding:20px 0;text-align:center;">
<!--[if mso | IE]>
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td
class="" style="vertical-align:top;width:600px;"
>
<![endif]-->
<div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;" width="100%">
<tr>
<td style="font-size:0px;padding:10px 25px;word-break:break-word;">
<p style="border-top:solid 4px #5a5c69;font-size:1;margin:0px auto;width:100%;"> </p>
<!--[if mso | IE]>
<table
align="center" border="0" cellpadding="0" cellspacing="0" style="border-top:solid 4px #5a5c69;font-size:1;margin:0px auto;width:550px;" role="presentation" width="550px"
>
<tr>
<td style="height:0;line-height:0;">
&nbsp;
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
<tr>
<td align="left" style="font-size:0px;padding:10px 25px;word-break:break-word;">
<div style="font-family:Roboto;font-size:20px;line-height:1;text-align:left;color:#000000;">
<h2>Digitale Agentur | Registrierung</h2>
</div>
</td>
</tr>
</table>
</div>
<!--[if mso | IE]>
</td>
<td
class="" style="vertical-align:top;width:600px;"
>
<![endif]-->
<div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;" width="100%">
<tr>
<td align="left" style="font-size:0px;padding:10px 25px;word-break:break-word;">
<div style="font-family:Roboto;font-size:18px;line-height:1;text-align:left;color:#000000;">
<p>Hallo {{username}},</p> Ihre Agentur wurde erstellt. Sie können sich nun hier anmelden und Ihre Agentur gestalten:
<p> <a href="https://digitale-agentur.com">https://digitale-agentur.com</a> </p> <br /> Ihr Benutzername: {{ username_log }} <br /> Weitere Informationen erhalten Sie in unserem Wiki <a href="https://wiki.digitale-agentur.com/">https://wiki.digitale-agentur.com/</a> oder per E-Mail an support@digitale-agentur.com! </p>
<p>Weitere Informationen erhalten Sie von Ihrem Agenturleiter. Vielen Dank, dass Sie die Plattform <b>Digitale Agentur</b> nutzen!</p>
<p>Mit freundlichen Grüßen</p>
<p>Ihr Team von Digitale Agentur</p>
</div>
</td>
</tr>
<tr>
<td style="font-size:0px;padding:10px 25px;word-break:break-word;">
<p style="border-top:solid 4px #5a5c69;font-size:1;margin:0px auto;width:100%;"> </p>
<!--[if mso | IE]>
<table
align="center" border="0" cellpadding="0" cellspacing="0" style="border-top:solid 4px #5a5c69;font-size:1;margin:0px auto;width:550px;" role="presentation" width="550px"
>
<tr>
<td style="height:0;line-height:0;">
&nbsp;
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
</table>
</div>
<!--[if mso | IE]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
</tbody>
</table>
</div>
<!--[if mso | IE]>
</td>
</tr>
</table>
<![endif]-->
</div>
</body>
</html>
{% endautoescape %}
</html>

View File

@ -0,0 +1,31 @@
{% load mjml %}
{% mjml %}
<mjml>
<mj-body>
<mj-section>
<mj-column width="100%">
<mj-divider border-color="#5a5c69"></mj-divider>
<mj-text font-size="20px" font-family="Roboto"><h2>Digitale Agentur | Registrierung</h2></mj-text>
</mj-column>
<mj-column width="100%">
<mj-text font-size="18px" font-family="Roboto">
<p>Hallo {{username}},</p>
Ihre Agentur wurde erstellt. Sie können sich nun hier anmelden und Ihre Agentur gestalten:
<p>
<a href="https://digitale-agentur.com">https://digitale-agentur.com</a>
</p>
<br />
Ihr Benutzername: {{ username_log }}
<br />
Weitere Informationen erhalten Sie in unserem Wiki <a href="https://wiki.digitale-agentur.com/">https://wiki.digitale-agentur.com/</a> oder per E-Mail an support@digitale-agentur.com!
</p>
<p>Weitere Informationen erhalten Sie von Ihrem Agenturleiter. Vielen Dank, dass Sie die Plattform <b>Digitale Agentur</b> nutzen!</p>
<p>Mit freundlichen Grüßen</p>
<p>Ihr Team von Digitale Agentur</p>
</mj-text>
<mj-divider border-color="#5a5c69"></mj-divider>
</mj-column>
</mj-section>
</mj-body>
</mjml>
{% endmjml %}

View File

@ -0,0 +1,31 @@
{% load i18n %}{% autoescape off %}
<html>
<head>
<link href='https://fonts.googleapis.com/css?family=Roboto&display=swap' rel='stylesheet' type='text/css'>
<style>
html {font-family: 'Roboto' !important;}html h6 {font-family: 'Roboto' !important;font-size: 1.0em;}html h5 {font-family: 'Roboto' !important;font-size: 1.1em;}html h4 {font-family: 'Roboto' !important;font-size: 1.3em;}html h3 {font-family: 'Roboto' !important;font-size: 1.5em;}html h2 {font-family: 'Roboto' !important;font-size: 1.7em;}html h1 {font-family: 'Roboto' !important;font-size: 2em;}body p{font-family: 'Roboto' !important;font-size: 0.9; color: #000000;}
</style>
</head>
<body>
<h3>Digitale Agentur Registrierung</h3>
<p>
Hallo {{username}},<br />
Ihre Agentur wurde erstellt. Sie können sich nun hier anmelden und ihre Agentur gestalten:
<p>
<a href="https://digitale-agentur.com">https://digitale-agentur.com</a>
</p>
<br />
Ihr Benutzername: {{ username_log }}
<br />
Weitere Informationen erhalten Sie in unserem Wiki <a href="https://wiki.digitale-agentur.com/">https://wiki.digitale-agentur.com/</a> oder per E-Mail an support@digitale-agentur.com!
</p>
<p>
Vielen Dank, dass Sie die Plattform <i>Digitale Agentur</i> nutzen!
<br />
Mit freundlichen Grüßen
<br /><br />
Ihr Team von Digitale Agentur
</p>
</body>
</html>
{% endautoescape %}

View File

@ -30,7 +30,9 @@ urlpatterns = [
path('areataskupdate/<int:pk>/', views.UsersAreaTaskUpdate, name="users-areataskupdate"),
path('globalsearch/', views.GlobalSearch, name="globalsearch"),
path('standardrout/', views.searchStandardRouter, name="standardrouter"),
path('support/', views.support, name="supportda"),
path('support/', views.support, name="supportda"),
path('datenschutz/', views.datenschutz, name="datenschutzda"),
path('impressum/', views.impressum, name="impressumda"),
path('setuserparent/', views.setuserparent, name="users-setuserparent"),
path('sendpassmail/', views.sendpassmail, name="users-sendpassmail")
]

View File

@ -556,3 +556,15 @@ def sendpassmail(request):
request.META['SERVER_PORT'] = '443'
form.save(request= request,use_https=True,from_email="support@digitale-agentur.com",html_email_template_name='users/password_reset_mail.html')
return JsonResponse({'message' : 0})
def datenschutz(request):
if request.user.is_authenticated:
return render(request, 'users/datenschutz.html')
else:
return render(request, 'users/datenschutz_p.html')
def impressum(request):
if request.user.is_authenticated:
return render(request, 'users/impressum.html')
else:
return render(request, 'users/impressum_p.html')