Compare commits

..

1 Commits

30 changed files with 47 additions and 85 deletions

View File

@@ -1,4 +1 @@
# vgui-cicd # VDeployment2
There are examples for importing text in the "Documentation"-directory. Actual documentation follows.

View File

@@ -38,7 +38,7 @@ INSTALLED_APPS = [
'django.contrib.sessions', 'django.contrib.sessions',
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'dokumente', 'standards',
'abschnitte', 'abschnitte',
'stichworte', 'stichworte',
'mptt', 'mptt',

View File

@@ -43,7 +43,7 @@ INSTALLED_APPS = [
'django.contrib.sessions', 'django.contrib.sessions',
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'dokumente', 'standards',
'abschnitte', 'abschnitte',
'stichworte', 'stichworte',
'referenzen', 'referenzen',

View File

@@ -19,7 +19,7 @@ from django.urls import include, path, re_path
from django.conf import settings from django.conf import settings
from django.conf.urls.static import static from django.conf.urls.static import static
from diagramm_proxy.views import DiagrammProxyView from diagramm_proxy.views import DiagrammProxyView
import dokumente.views import standards.views
import pages.views import pages.views
import referenzen.views import referenzen.views
@@ -28,7 +28,7 @@ admin.site.site_header="Autorenumgebung"
urlpatterns = [ urlpatterns = [
path('',pages.views.startseite), path('',pages.views.startseite),
path('search/',pages.views.search), path('search/',pages.views.search),
path('dokumente/', include("dokumente.urls")), path('standards/', include("standards.urls")),
path('autorenumgebung/', admin.site.urls), path('autorenumgebung/', admin.site.urls),
path('stichworte/', include("stichworte.urls")), path('stichworte/', include("stichworte.urls")),
path('referenzen/', referenzen.views.tree, name="referenz_tree"), path('referenzen/', referenzen.views.tree, name="referenz_tree"),

Binary file not shown.

View File

@@ -16,7 +16,7 @@
</button> </button>
<div class="collapse navbar-collapse" id="navbarNavAltMarkup"> <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
<div class="navbar-nav"> <div class="navbar-nav">
<a class="nav-item nav-link active" href="/dokumente">Standards</a> <a class="nav-item nav-link active" href="/standards">Standards</a>
<a class="nav-item nav-link" href="/referenzen">Referenzen</a> <a class="nav-item nav-link" href="/referenzen">Referenzen</a>
<a class="nav-item nav-link" href="/stichworte">Stichworte</a> <a class="nav-item nav-link" href="/stichworte">Stichworte</a>
<a class="nav-item nav-link" href="/search">Suche</a> <a class="nav-item nav-link" href="/search">Suche</a>
@@ -28,6 +28,6 @@
<div class="flex-fill">{% block content %}Main Content{% endblock %}</div> <div class="flex-fill">{% block content %}Main Content{% endblock %}</div>
<div class="col-md-2">{% block sidebar_right %}{% endblock %}</div> <div class="col-md-2">{% block sidebar_right %}{% endblock %}</div>
</div> </div>
<div>VorgabenUI v0.927</div> <div>VorgabenUI v0.930</div>
</body> </body>
</html> </html>

View File

@@ -12,9 +12,9 @@
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% if resultat.kurztext %} {% if resultat.all %}
<h2>Vorgaben mit "{{ suchbegriff }}" im Kurztext</h2> <h2>Vorgaben mit "{{ suchbegriff }}"</h2>
{% for standard, vorgaben in resultat.kurztext.items %} {% for standard, vorgaben in resultat.all.items %}
<h4>{{ standard }}</h4> <h4>{{ standard }}</h4>
<ul> <ul>
{% for vorgabe in vorgaben %} {% for vorgabe in vorgaben %}
@@ -24,18 +24,7 @@
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% if resultat.langtext %} {% if not resultat.all %}
<h2>Vorgaben mit "{{ suchbegriff }}" im Langtext</h2>
{% for standard, vorgaben in resultat.langtext.items %}
<h4>{{ standard }}</h4>
<ul>
{% for vorgabe in vorgaben %}
<li><a href="{% url 'standard_detail' nummer=vorgabe.dokument.nummer %}#{{vorgabe.Vorgabennummer}}">{{vorgabe}}</a></li>
{% endfor %}
</ul>
{% endfor %}
{% endif %}
{% if not resultat.langtext and not resultat.kurztext and not resultat.geltungsbereich %}
<h2>Keine Resultate für "{{suchbegriff}}"</h2> <h2>Keine Resultate für "{{suchbegriff}}"</h2>
{% endif %} {% endif %}
{% endblock %} {% endblock %}

View File

@@ -15,27 +15,6 @@
placeholder="Suchbegriff eingeben …" placeholder="Suchbegriff eingeben …"
required> required>
</div> </div>
<!-- Check-box group -->
<fieldset class="mb-4">
<legend class="h6 mb-2">In folgenden Bereichen suchen:</legend>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="kurztext" id="kurztext" name="suchbereich[]" checked>
<label class="form-check-label" for="kurztext">Kurztext</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="langtext" id="langtext" name="suchbereich[]" checked>
<label class="form-check-label" for="langtext">Langtext</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="geltungsbereich" id="geltungsbereich" name="suchbereich[]">
<label class="form-check-label" for="geltungsbereich">Geltungsbereich</label>
</div>
</fieldset>
<button type="submit" class="btn btn-primary">Suchen</button> <button type="submit" class="btn btn-primary">Suchen</button>
</form> </form>
{% endblock %} {% endblock %}

View File

@@ -3,7 +3,7 @@
<h1>Vorgaben Informatiksicherheit BIT</h1> <h1>Vorgaben Informatiksicherheit BIT</h1>
<h2>Aktuell erfasste Standards</h2> <h2>Aktuell erfasste Standards</h2>
<ul> <ul>
{% for standard in dokumente %} {% for standard in standards %}
<li><a href="{% url 'standard_detail' nummer=standard.nummer %}">{{ standard }}</a></li> <li><a href="{% url 'standard_detail' nummer=standard.nummer %}">{{ standard }}</a></li>
{% endfor %} {% endfor %}
</ul> </ul>

View File

@@ -1,12 +1,12 @@
from django.shortcuts import render from django.shortcuts import render
from abschnitte.utils import render_textabschnitte from abschnitte.utils import render_textabschnitte
from dokumente.models import Dokument, VorgabeLangtext, VorgabeKurztext, Geltungsbereich from standards.models import Dokument, VorgabeLangtext, VorgabeKurztext, Geltungsbereich
from itertools import groupby from itertools import groupby
import datetime import datetime
def startseite(request): def startseite(request):
standards=list(Dokument.objects.all()) standards=list(Dokument.objects.all())
return render(request, 'startseite.html', {"dokumente":standards,}) return render(request, 'startseite.html', {"standards":standards,})
def search(request): def search(request):
if request.method == "GET": if request.method == "GET":
@@ -14,21 +14,18 @@ def search(request):
elif request.method == "POST": elif request.method == "POST":
suchbegriff=request.POST.get("q") suchbegriff=request.POST.get("q")
areas=request.POST.getlist("suchbereich[]") areas=request.POST.getlist("suchbereich[]")
result= {} result= {"all": {}}
geltungsbereich=set()
if "kurztext" in areas:
qs = VorgabeKurztext.objects.filter(inhalt__contains=suchbegriff).exclude(abschnitt__gueltigkeit_bis__lt=datetime.date.today()) qs = VorgabeKurztext.objects.filter(inhalt__contains=suchbegriff).exclude(abschnitt__gueltigkeit_bis__lt=datetime.date.today())
result["kurztext"] = {k: [o.abschnitt for o in g] for k, g in groupby(qs, key=lambda o: o.abschnitt.dokument)} result["kurztext"] = {k: [o.abschnitt for o in g] for k, g in groupby(qs, key=lambda o: o.abschnitt.dokument)}
if "langtext" in areas:
qs = VorgabeLangtext.objects.filter(inhalt__contains=suchbegriff).exclude(abschnitt__gueltigkeit_bis__lt=datetime.date.today()) qs = VorgabeLangtext.objects.filter(inhalt__contains=suchbegriff).exclude(abschnitt__gueltigkeit_bis__lt=datetime.date.today())
result['langtext']= {k: [o.abschnitt for o in g] for k, g in groupby(qs, key=lambda o: o.abschnitt.dokument)} result['langtext']= {k: [o.abschnitt for o in g] for k, g in groupby(qs, key=lambda o: o.abschnitt.dokument)}
if "geltungsbereich" in areas:
result["geltungsbereich"]={} result["geltungsbereich"]={}
geltungsbereich=set(list([x.geltungsbereich for x in Geltungsbereich.objects.filter(inhalt__contains=suchbegriff)])) geltungsbereich=set(list([x.geltungsbereich for x in Geltungsbereich.objects.filter(inhalt__contains=suchbegriff)]))
for s in geltungsbereich: for s in geltungsbereich:
result["geltungsbereich"][s]=render_textabschnitte(s.geltungsbereich_set.order_by("order")) result["geltungsbereich"][s]=render_textabschnitte(s.geltungsbereich_set.order_by("order"))
for r in result.keys(): for r in result.keys():
for s in result[r].keys(): for s in result[r].keys():
result[r][s]=set(result[r][s]) result["all"][s] = set(result[r][s])
print (result)
return render(request,"results.html",{"suchbegriff":suchbegriff,"resultat":result}) return render(request,"results.html",{"suchbegriff":suchbegriff,"resultat":result})

View File

@@ -3,4 +3,4 @@ from django.apps import AppConfig
class standardsConfig(AppConfig): class standardsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField' default_auto_field = 'django.db.models.BigAutoField'
name = 'dokumente' name = 'standards'

View File

@@ -4,7 +4,7 @@ from pathlib import Path
from django.core.management.base import BaseCommand, CommandError from django.core.management.base import BaseCommand, CommandError
from django.utils import timezone from django.utils import timezone
from dokumente.models import ( from standards.models import (
Dokument, Dokument,
Dokumententyp, Dokumententyp,
Thema, Thema,

View File

@@ -53,7 +53,7 @@ class Migration(migrations.Migration):
('rght', models.PositiveIntegerField(editable=False)), ('rght', models.PositiveIntegerField(editable=False)),
('tree_id', models.PositiveIntegerField(db_index=True, editable=False)), ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)),
('level', models.PositiveIntegerField(editable=False)), ('level', models.PositiveIntegerField(editable=False)),
('oberreferenz', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='unterreferenzen', to='dokumente.referenz')), ('oberreferenz', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='unterreferenzen', to='standards.referenz')),
], ],
options={ options={
'verbose_name_plural': 'Referenzen', 'verbose_name_plural': 'Referenzen',
@@ -65,7 +65,7 @@ class Migration(migrations.Migration):
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('inhalt', models.TextField(blank=True, null=True)), ('inhalt', models.TextField(blank=True, null=True)),
('abschnitttyp', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='abschnitte.abschnitttyp')), ('abschnitttyp', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='abschnitte.abschnitttyp')),
('erklaerung', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dokumente.referenz')), ('erklaerung', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='standards.referenz')),
], ],
options={ options={
'verbose_name': 'Erklärung', 'verbose_name': 'Erklärung',
@@ -80,9 +80,9 @@ class Migration(migrations.Migration):
('gueltigkeit_bis', models.DateField(blank=True, null=True)), ('gueltigkeit_bis', models.DateField(blank=True, null=True)),
('signatur_cso', models.CharField(blank=True, max_length=255)), ('signatur_cso', models.CharField(blank=True, max_length=255)),
('anhaenge', models.TextField(blank=True)), ('anhaenge', models.TextField(blank=True)),
('autoren', models.ManyToManyField(related_name='verfasste_dokumente', to='dokumente.person')), ('autoren', models.ManyToManyField(related_name='verfasste_dokumente', to='standards.person')),
('dokumententyp', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='dokumente.dokumententyp')), ('dokumententyp', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='standards.dokumententyp')),
('pruefende', models.ManyToManyField(related_name='gepruefte_dokumente', to='dokumente.person')), ('pruefende', models.ManyToManyField(related_name='gepruefte_dokumente', to='standards.person')),
], ],
options={ options={
'verbose_name': 'Standard', 'verbose_name': 'Standard',
@@ -95,7 +95,7 @@ class Migration(migrations.Migration):
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('inhalt', models.TextField(blank=True, null=True)), ('inhalt', models.TextField(blank=True, null=True)),
('abschnitttyp', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='abschnitte.abschnitttyp')), ('abschnitttyp', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='abschnitte.abschnitttyp')),
('geltungsbereich', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dokumente.standard')), ('geltungsbereich', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='standards.standard')),
], ],
options={ options={
'verbose_name': 'Geltungsbereichs-Abschnitt', 'verbose_name': 'Geltungsbereichs-Abschnitt',
@@ -108,8 +108,8 @@ class Migration(migrations.Migration):
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('datum', models.DateField()), ('datum', models.DateField()),
('aenderung', models.TextField()), ('aenderung', models.TextField()),
('autoren', models.ManyToManyField(to='dokumente.person')), ('autoren', models.ManyToManyField(to='standards.person')),
('dokument', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='changelog', to='dokumente.standard')), ('dokument', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='changelog', to='standards.standard')),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
@@ -120,10 +120,10 @@ class Migration(migrations.Migration):
('titel', models.CharField(max_length=255)), ('titel', models.CharField(max_length=255)),
('gueltigkeit_von', models.DateField()), ('gueltigkeit_von', models.DateField()),
('gueltigkeit_bis', models.DateField(blank=True, null=True)), ('gueltigkeit_bis', models.DateField(blank=True, null=True)),
('dokument', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='vorgaben', to='dokumente.standard')), ('dokument', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='vorgaben', to='standards.standard')),
('referenzen', models.ManyToManyField(blank=True, to='dokumente.referenz')), ('referenzen', models.ManyToManyField(blank=True, to='standards.referenz')),
('stichworte', models.ManyToManyField(blank=True, to='stichworte.stichwort')), ('stichworte', models.ManyToManyField(blank=True, to='stichworte.stichwort')),
('thema', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='dokumente.thema')), ('thema', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='standards.thema')),
], ],
options={ options={
'verbose_name_plural': 'Vorgaben', 'verbose_name_plural': 'Vorgaben',
@@ -134,7 +134,7 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('frage', models.CharField(max_length=255)), ('frage', models.CharField(max_length=255)),
('vorgabe', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='checklistenfragen', to='dokumente.vorgabe')), ('vorgabe', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='checklistenfragen', to='standards.vorgabe')),
], ],
options={ options={
'verbose_name_plural': 'Fragen für Checkliste', 'verbose_name_plural': 'Fragen für Checkliste',
@@ -145,7 +145,7 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('inhalt', models.TextField(blank=True, null=True)), ('inhalt', models.TextField(blank=True, null=True)),
('abschnitt', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dokumente.vorgabe')), ('abschnitt', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='standards.vorgabe')),
('abschnitttyp', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='abschnitte.abschnitttyp')), ('abschnitttyp', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='abschnitte.abschnitttyp')),
], ],
options={ options={
@@ -158,7 +158,7 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('inhalt', models.TextField(blank=True, null=True)), ('inhalt', models.TextField(blank=True, null=True)),
('abschnitt', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dokumente.vorgabe')), ('abschnitt', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='standards.vorgabe')),
('abschnitttyp', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='abschnitte.abschnitttyp')), ('abschnitttyp', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='abschnitte.abschnitttyp')),
], ],
options={ options={

View File

@@ -8,7 +8,7 @@ class Migration(migrations.Migration):
dependencies = [ dependencies = [
('abschnitte', '0001_initial'), ('abschnitte', '0001_initial'),
('dokumente', '0001_initial'), ('standards', '0001_initial'),
] ]
operations = [ operations = [
@@ -18,7 +18,7 @@ class Migration(migrations.Migration):
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('inhalt', models.TextField(blank=True, null=True)), ('inhalt', models.TextField(blank=True, null=True)),
('abschnitttyp', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='abschnitte.abschnitttyp')), ('abschnitttyp', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='abschnitte.abschnitttyp')),
('einleitung', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dokumente.standard')), ('einleitung', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='standards.standard')),
], ],
options={ options={
'verbose_name': 'Einleitungs-Abschnitt', 'verbose_name': 'Einleitungs-Abschnitt',

View File

@@ -6,7 +6,7 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('dokumente', '0002_einleitung'), ('standards', '0002_einleitung'),
] ]
operations = [ operations = [

View File

@@ -7,7 +7,7 @@ class Migration(migrations.Migration):
dependencies = [ dependencies = [
('referenzen', '0001_initial'), ('referenzen', '0001_initial'),
('dokumente', '0003_einleitung_order_geltungsbereich_order_and_more'), ('standards', '0003_einleitung_order_geltungsbereich_order_and_more'),
] ]
operations = [ operations = [

View File

@@ -7,7 +7,7 @@ class Migration(migrations.Migration):
dependencies = [ dependencies = [
('rollen', '0001_initial'), ('rollen', '0001_initial'),
('dokumente', '0004_remove_referenzerklaerung_erklaerung_and_more'), ('standards', '0004_remove_referenzerklaerung_erklaerung_and_more'),
] ]
operations = [ operations = [

View File

@@ -6,7 +6,7 @@ from django.db import migrations
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('dokumente', '0005_vorgabe_relevanz'), ('standards', '0005_vorgabe_relevanz'),
] ]
operations = [ operations = [

View File

@@ -6,7 +6,7 @@ from django.db import migrations
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('dokumente', '0006_rename_standard_dokument_alter_dokument_options'), ('standards', '0006_rename_standard_dokument_alter_dokument_options'),
] ]
operations = [ operations = [

View File

@@ -11,7 +11,7 @@ calendar=parsedatetime.Calendar()
def standard_list(request): def standard_list(request):
standards = Dokument.objects.all() standards = Dokument.objects.all()
return render(request, 'standards/standard_list.html', return render(request, 'standards/standard_list.html',
{'dokumente': standards} {'standards': standards}
) )