diff --git a/private/scss/modules/_control-panel.scss b/private/scss/modules/_control-panel.scss index 3a5f6bd..4c080df 100644 --- a/private/scss/modules/_control-panel.scss +++ b/private/scss/modules/_control-panel.scss @@ -5,7 +5,7 @@ text-align: left; } -.task__form { +.information__form { margin-top: em(50px); } diff --git a/settings.py b/settings.py index eec11ff..3f2061f 100644 --- a/settings.py +++ b/settings.py @@ -25,7 +25,7 @@ aldryn_addons.settings.load(locals()) INSTALLED_APPS.extend([ 'project', - 'memberzone', + 'portal', 'fontawesome', 'haystack', 'aldryn_search', diff --git a/src/memberzone/migrations/0001_initial.py b/src/memberzone/migrations/0001_initial.py deleted file mode 100644 index ac9a6fa..0000000 --- a/src/memberzone/migrations/0001_initial.py +++ /dev/null @@ -1,158 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.11 on 2018-03-21 12:32 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import djangocms_text_ckeditor.fields -import filer.fields.folder -import filer.fields.image - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('auth', '0008_alter_user_username_max_length'), - migrations.swappable_dependency(settings.FILER_IMAGE_MODEL), - ('filer', '0007_auto_20161016_1055'), - ] - - operations = [ - migrations.CreateModel( - name='MemberDownloadFile', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(blank=True, max_length=512, null=True, verbose_name='Name')), - ('file', models.FileField(max_length=512, upload_to='protected_files')), - ('thumbnail', models.FileField(blank=True, null=True, upload_to='protected_thumbnails')), - ('ordering', models.IntegerField(default=50, verbose_name='Sortierung')), - ('groups', models.ManyToManyField(related_name='files', to='auth.Group', verbose_name='Mitgliedergruppen')), - ], - options={ - 'verbose_name_plural': 'Mitglieder Downloads', - 'verbose_name': 'Mitglieder Download', - 'ordering': ['ordering', 'name'], - }, - ), - migrations.CreateModel( - name='MemberDownloadSection', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=100, verbose_name='Title')), - ('ordering', models.IntegerField(default=50, verbose_name='Sortierung')), - ], - options={ - 'verbose_name_plural': 'Mitglieder Download Sections', - 'verbose_name': 'Mitglieder Download Section', - 'ordering': ['ordering'], - }, - ), - migrations.CreateModel( - name='MemberDownloadTag', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=100, verbose_name='Name')), - ], - options={ - 'verbose_name_plural': 'Mitglieder Download Tags', - 'verbose_name': 'Mitglieder Download Tag', - }, - ), - migrations.CreateModel( - name='MemberTask', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=100, verbose_name='Title')), - ('slug', models.SlugField(unique=True, verbose_name='slug')), - ('sub_title', models.CharField(blank=True, max_length=100, verbose_name='Untertitle')), - ('bodytext', djangocms_text_ckeditor.fields.HTMLField(verbose_name='Inhalt')), - ('publish_date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='Veröffentlichungsdatum')), - ('deadline', models.DateTimeField(blank=True, null=True, verbose_name='Anmeldeschluss')), - ('max_num', models.IntegerField(default=1, verbose_name='max. Formulare')), - ('submit_text', models.CharField(default='Als gelesen markieren', max_length=100, verbose_name='Formular Button Text')), - ('form_bodytext', djangocms_text_ckeditor.fields.HTMLField(blank=True, default='

Jetzt anmelden

', verbose_name='Formular Beschreibung')), - ('success_title', models.CharField(default='Ihre Anmeldung wurde erfasst', max_length=200, verbose_name='Bestätigungstitel')), - ('success_bodytext', djangocms_text_ckeditor.fields.HTMLField(verbose_name='Bestätigungstext')), - ('folder', filer.fields.folder.FilerFolderField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='filer.Folder', verbose_name='Bilder')), - ('groups', models.ManyToManyField(related_name='tasks', to='auth.Group', verbose_name='Mitglieder Gruppe')), - ('image', filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.FILER_IMAGE_MODEL, verbose_name='Bild')), - ], - options={ - 'verbose_name_plural': 'Mitglieder Aufgaben', - 'verbose_name': 'Mitglieder Aufgabe', - 'ordering': ['-publish_date'], - }, - ), - migrations.CreateModel( - name='MemberTaskFormField', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('type', models.CharField(choices=[('text', 'Text Feld (einzeilig)'), ('textarea', 'Text Feld (mehrzeilig)'), ('email', 'E-Mail Feld'), ('radio', 'Auswahlfeld (eine auswahl)'), ('checkbox', 'Auswahlfeld (mehrere auswahlen)')], max_length=30)), - ('label', models.CharField(max_length=100, verbose_name='Label')), - ('name', models.SlugField(verbose_name='Name')), - ('choices', models.TextField(blank=True, help_text='Werte die bei einem Auswahlfeld zur verfügung stehen sollen. Ein wert pro Zeile', verbose_name='Auswahlwerte')), - ('required', models.BooleanField(default=False, verbose_name='Pflichtfeld')), - ('ordering', models.IntegerField(default=50, verbose_name='Sortierung')), - ('task', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='fields', to='memberzone.MemberTask', verbose_name='Mitglieder Aufgabe')), - ], - options={ - 'verbose_name_plural': 'Formularfelder', - 'verbose_name': 'Formularfeld', - 'ordering': ['ordering'], - }, - ), - migrations.CreateModel( - name='MemberTaskRegistration', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('form_data', models.TextField(verbose_name='Form Content')), - ('cdate', models.DateTimeField(auto_now_add=True)), - ('task', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='registrations', to='memberzone.MemberTask', verbose_name='Mitglieder Aufgabe')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='registrations', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name_plural': 'Mitglieder Aufgaben Registierungen', - 'verbose_name': 'Mitglieder Aufgabe Registierung', - }, - ), - migrations.CreateModel( - name='Profile', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('first_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='Vorname')), - ('last_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='Nachname')), - ('street', models.CharField(blank=True, max_length=255, null=True, verbose_name='Strasse')), - ('zip', models.IntegerField(blank=True, null=True, verbose_name='PLZ')), - ('place', models.CharField(blank=True, max_length=255, null=True, verbose_name='Ort')), - ('email', models.EmailField(blank=True, max_length=254, null=True, verbose_name='E-Mail')), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='profile', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name_plural': 'User Profile', - 'verbose_name': 'User Profil', - }, - ), - migrations.AddField( - model_name='memberdownloadfile', - name='section', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='files', to='memberzone.MemberDownloadSection', verbose_name='Download Section'), - ), - migrations.AddField( - model_name='memberdownloadfile', - name='tags', - field=models.ManyToManyField(blank=True, null=True, related_name='files', to='memberzone.MemberDownloadTag', verbose_name='Suchbegriffe'), - ), - migrations.AlterUniqueTogether( - name='membertaskregistration', - unique_together=set([('user', 'task')]), - ), - migrations.AlterUniqueTogether( - name='membertaskformfield', - unique_together=set([('task', 'name')]), - ), - ] diff --git a/src/memberzone/migrations/0002_auto_20180321_1256.py b/src/memberzone/migrations/0002_auto_20180321_1256.py deleted file mode 100644 index c171b8b..0000000 --- a/src/memberzone/migrations/0002_auto_20180321_1256.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.11 on 2018-03-21 12:56 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('memberzone', '0001_initial'), - ] - - operations = [ - migrations.RemoveField( - model_name='memberdownloadfile', - name='thumbnail', - ), - migrations.AddField( - model_name='memberdownloadfile', - name='description', - field=models.TextField(blank=True, null=True, verbose_name='Beschreibung'), - ), - ] diff --git a/src/memberzone/migrations/0003_auto_20180322_1052.py b/src/memberzone/migrations/0003_auto_20180322_1052.py deleted file mode 100644 index e087925..0000000 --- a/src/memberzone/migrations/0003_auto_20180322_1052.py +++ /dev/null @@ -1,240 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.11 on 2018-03-22 10:52 -from __future__ import unicode_literals - -import cms.models.fields -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import image_cropping.fields -import project.utils - - -class Migration(migrations.Migration): - - dependencies = [ - ('cms', '0018_pagenode'), - ('memberzone', '0002_auto_20180321_1256'), - ] - - operations = [ - migrations.CreateModel( - name='MemberDownloadFileTranslation', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), - ('name', models.CharField(blank=True, max_length=512, null=True, verbose_name='Name')), - ('description', models.TextField(blank=True, null=True, verbose_name='Beschreibung')), - ('file', models.FileField(max_length=512, upload_to='protected_files')), - ], - options={ - 'db_table': 'memberzone_memberdownloadfile_translation', - 'default_permissions': (), - 'managed': True, - 'db_tablespace': '', - 'verbose_name': 'Mitglieder Download Translation', - }, - ), - migrations.CreateModel( - name='MemberDownloadSectionTranslation', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), - ('title', models.CharField(max_length=100, verbose_name='Title')), - ], - options={ - 'db_table': 'memberzone_memberdownloadsection_translation', - 'default_permissions': (), - 'managed': True, - 'db_tablespace': '', - 'verbose_name': 'Mitglieder Download Section Translation', - }, - ), - migrations.CreateModel( - name='MemberDownloadTagTranslation', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), - ('name', models.CharField(max_length=100, verbose_name='Name')), - ], - options={ - 'db_table': 'memberzone_memberdownloadtag_translation', - 'default_permissions': (), - 'managed': True, - 'db_tablespace': '', - 'verbose_name': 'Mitglieder Download Tag Translation', - }, - ), - migrations.CreateModel( - name='MemberTaskTranslation', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), - ('title', models.CharField(max_length=100, verbose_name='Title')), - ], - options={ - 'db_table': 'memberzone_membertask_translation', - 'default_permissions': (), - 'managed': True, - 'db_tablespace': '', - 'verbose_name': 'Mitglieder Aufgabe Translation', - }, - ), - migrations.AlterUniqueTogether( - name='membertaskformfield', - unique_together=set([]), - ), - migrations.RemoveField( - model_name='membertaskformfield', - name='task', - ), - migrations.AlterUniqueTogether( - name='membertaskregistration', - unique_together=set([]), - ), - migrations.RemoveField( - model_name='membertaskregistration', - name='task', - ), - migrations.RemoveField( - model_name='membertaskregistration', - name='user', - ), - migrations.AlterModelOptions( - name='memberdownloadfile', - options={'ordering': ['ordering'], 'verbose_name': 'Mitglieder Download', 'verbose_name_plural': 'Mitglieder Downloads'}, - ), - migrations.RemoveField( - model_name='memberdownloadfile', - name='description', - ), - migrations.RemoveField( - model_name='memberdownloadfile', - name='file', - ), - migrations.RemoveField( - model_name='memberdownloadfile', - name='name', - ), - migrations.RemoveField( - model_name='memberdownloadsection', - name='title', - ), - migrations.RemoveField( - model_name='memberdownloadtag', - name='name', - ), - migrations.RemoveField( - model_name='membertask', - name='bodytext', - ), - migrations.RemoveField( - model_name='membertask', - name='deadline', - ), - migrations.RemoveField( - model_name='membertask', - name='folder', - ), - migrations.RemoveField( - model_name='membertask', - name='form_bodytext', - ), - migrations.RemoveField( - model_name='membertask', - name='max_num', - ), - migrations.RemoveField( - model_name='membertask', - name='slug', - ), - migrations.RemoveField( - model_name='membertask', - name='sub_title', - ), - migrations.RemoveField( - model_name='membertask', - name='submit_text', - ), - migrations.RemoveField( - model_name='membertask', - name='success_bodytext', - ), - migrations.RemoveField( - model_name='membertask', - name='success_title', - ), - migrations.RemoveField( - model_name='membertask', - name='title', - ), - migrations.AddField( - model_name='membertask', - name='cropping', - field=image_cropping.fields.ImageRatioField('image', '1200x800', adapt_rotation=False, allow_fullsize=False, free_crop=True, help_text=None, hide_image_field=False, size_warning=False, verbose_name='cropping'), - ), - migrations.AddField( - model_name='membertask', - name='placeholder', - field=cms.models.fields.PlaceholderField(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, slotname='task_placeholder', to='cms.Placeholder'), - ), - migrations.AlterField( - model_name='membertask', - name='image', - field=project.utils.CroppableFilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.FILER_IMAGE_MODEL, verbose_name='Bild'), - ), - migrations.AlterField( - model_name='profile', - name='first_name', - field=models.CharField(default='', max_length=255, verbose_name='Vorname'), - preserve_default=False, - ), - migrations.AlterField( - model_name='profile', - name='last_name', - field=models.CharField(default='', max_length=255, verbose_name='Nachname'), - preserve_default=False, - ), - migrations.DeleteModel( - name='MemberTaskFormField', - ), - migrations.DeleteModel( - name='MemberTaskRegistration', - ), - migrations.AddField( - model_name='membertasktranslation', - name='master', - field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='memberzone.MemberTask'), - ), - migrations.AddField( - model_name='memberdownloadtagtranslation', - name='master', - field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='memberzone.MemberDownloadTag'), - ), - migrations.AddField( - model_name='memberdownloadsectiontranslation', - name='master', - field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='memberzone.MemberDownloadSection'), - ), - migrations.AddField( - model_name='memberdownloadfiletranslation', - name='master', - field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='memberzone.MemberDownloadFile'), - ), - migrations.AlterUniqueTogether( - name='membertasktranslation', - unique_together=set([('language_code', 'master')]), - ), - migrations.AlterUniqueTogether( - name='memberdownloadtagtranslation', - unique_together=set([('language_code', 'master')]), - ), - migrations.AlterUniqueTogether( - name='memberdownloadsectiontranslation', - unique_together=set([('language_code', 'master')]), - ), - migrations.AlterUniqueTogether( - name='memberdownloadfiletranslation', - unique_together=set([('language_code', 'master')]), - ), - ] diff --git a/src/memberzone/migrations/0004_membertask_published.py b/src/memberzone/migrations/0004_membertask_published.py deleted file mode 100644 index af806c1..0000000 --- a/src/memberzone/migrations/0004_membertask_published.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.11 on 2018-03-22 11:21 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('memberzone', '0003_auto_20180322_1052'), - ] - - operations = [ - migrations.AddField( - model_name='membertask', - name='published', - field=models.BooleanField(default=False, verbose_name='Veröffentlichen'), - ), - ] diff --git a/src/memberzone/migrations/0005_auto_20180322_1205.py b/src/memberzone/migrations/0005_auto_20180322_1205.py deleted file mode 100644 index a1b2cbd..0000000 --- a/src/memberzone/migrations/0005_auto_20180322_1205.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.11 on 2018-03-22 12:05 -from __future__ import unicode_literals - -import cms.models.fields -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('memberzone', '0004_membertask_published'), - ] - - operations = [ - migrations.AddField( - model_name='membertask', - name='informed_users', - field=models.ManyToManyField(blank=True, null=True, to=settings.AUTH_USER_MODEL, verbose_name='Als gelesen markiert von:'), - ), - migrations.AlterField( - model_name='membertask', - name='placeholder', - field=cms.models.fields.PlaceholderField(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, slotname='content', to='cms.Placeholder'), - ), - ] diff --git a/src/memberzone/urls.py b/src/memberzone/urls.py deleted file mode 100644 index 1baaf0f..0000000 --- a/src/memberzone/urls.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -from django.conf.urls import url -from django.contrib.auth.decorators import login_required -from django.contrib.auth.views import LoginView, LogoutView, PasswordChangeView -from django.core.urlresolvers import reverse_lazy -from django.utils.translation import ugettext_lazy as _ -from django.views.generic import TemplateView - -from memberzone.forms import LoginForm -from memberzone.views import OverviewView, MemberTaskDetailView, MemberTaskDetailSuccessView, ProfileEditView - -urlpatterns = [ - url(_(r'^login/$'), LoginView.as_view(form_class=LoginForm), name='login'), - - url(_(r'^logout/$'), LogoutView.as_view(next_page=reverse_lazy('memberzone:overview')), name='logout'), - - url(_(r'^account/change/password/$'), login_required(PasswordChangeView.as_view( - template_name='memberzone/change_form.html', - success_url=reverse_lazy('memberzone:change_password_done') - ), login_url=reverse_lazy('memberzone:login')), name='change_password'), - - url(_(r'^account/change/password/success/$'), login_required(TemplateView.as_view( - template_name='memberzone/change_success.html' - ), login_url=reverse_lazy('memberzone:login')), name='change_password_done'), - - url(_(r'^profile/edit/$'), login_required(ProfileEditView.as_view( - ), login_url=reverse_lazy('memberzone:login')), name='profile_edit'), - - url(_(r'^profile/edit/success/$'), login_required(TemplateView.as_view( - template_name='memberzone/change_success.html' - ), login_url=reverse_lazy('memberzone:login')), name='profile_edit_done'), - - url(_(r'^info/(?P\d+)/$'), login_required(MemberTaskDetailView.as_view( - ), login_url=reverse_lazy('memberzone:login')), name='task'), - - url(_(r'^$'), login_required(OverviewView.as_view(), login_url=reverse_lazy('memberzone:login')), - name='overview'), -] diff --git a/src/memberzone/__init__.py b/src/portal/__init__.py similarity index 100% rename from src/memberzone/__init__.py rename to src/portal/__init__.py diff --git a/src/memberzone/admin.py b/src/portal/admin.py similarity index 75% rename from src/memberzone/admin.py rename to src/portal/admin.py index 2fd52f8..f772aaf 100644 --- a/src/memberzone/admin.py +++ b/src/portal/admin.py @@ -5,7 +5,7 @@ from django.utils.translation import ugettext_lazy as _ from parler.admin import TranslatableAdmin from django.contrib.auth.admin import UserAdmin as BaseUserAdmin -from memberzone.models import Profile, MemberTask, MemberDownloadSection, MemberDownloadTag, MemberDownloadFile +from portal.models import Profile, Information, DownloadSection, DownloadTag, DownloadFile User = get_user_model() @@ -27,8 +27,8 @@ admin.site.unregister(User) admin.site.register(User, UserAdmin) -@admin.register(MemberTask) -class MemberTaskAdmin(TranslatableAdmin): +@admin.register(Information) +class InformationAdmin(TranslatableAdmin): list_display = ('title', 'published', 'publish_date') list_filter = ('groups',) filter_horizontal = ('groups',) @@ -41,19 +41,19 @@ class MemberTaskAdmin(TranslatableAdmin): ) -@admin.register(MemberDownloadSection) -class MemberDownloadSectionAdmin(TranslatableAdmin): +@admin.register(DownloadSection) +class DownloadSectionAdmin(TranslatableAdmin): list_display = ('title', 'ordering') list_editable = ['ordering'] -@admin.register(MemberDownloadTag) -class MemberDownloadTagAdmin(TranslatableAdmin): +@admin.register(DownloadTag) +class DownloadTagAdmin(TranslatableAdmin): pass -@admin.register(MemberDownloadFile) -class MemberDownloadFileAdmin(TranslatableAdmin): +@admin.register(DownloadFile) +class DownloadFileAdmin(TranslatableAdmin): list_display = ('label', 'ordering') list_editable = ['ordering'] list_filter = ('section', 'groups') diff --git a/src/memberzone/forms.py b/src/portal/forms.py similarity index 87% rename from src/memberzone/forms.py rename to src/portal/forms.py index d8c4c18..985aa49 100644 --- a/src/memberzone/forms.py +++ b/src/portal/forms.py @@ -2,7 +2,7 @@ from django import forms from django.contrib.auth.forms import AuthenticationForm -from memberzone.models import Profile +from portal.models import Profile class LoginForm(AuthenticationForm): diff --git a/src/memberzone/migrations/__init__.py b/src/portal/migrations/__init__.py similarity index 100% rename from src/memberzone/migrations/__init__.py rename to src/portal/migrations/__init__.py diff --git a/src/memberzone/models.py b/src/portal/models.py similarity index 83% rename from src/memberzone/models.py rename to src/portal/models.py index 15650b0..55c332f 100644 --- a/src/memberzone/models.py +++ b/src/portal/models.py @@ -12,7 +12,7 @@ from django.utils.translation import ugettext_lazy as _ from image_cropping import ImageRatioField from parler.models import TranslatableModel, TranslatedFields -from memberzone.storage import PrivateS3MediaStorage +from portal.storage import PrivateS3MediaStorage from project.utils import CroppableFilerImageField @@ -37,7 +37,7 @@ class Profile(models.Model): return '{} {}'.format(self.first_name, self.last_name) -class MemberTask(TranslatableModel): +class Information(TranslatableModel): groups = models.ManyToManyField(Group, verbose_name='Mitglieder Gruppe', related_name='tasks') image = CroppableFilerImageField(verbose_name='Bild', blank=True, null=True) cropping = ImageRatioField('image', '1200x800', free_crop=True) @@ -63,32 +63,32 @@ class MemberTask(TranslatableModel): return self.title def get_absolute_url(self): - return reverse_lazy('memberzone:task', args=[self.pk]) + return reverse_lazy('portal:information', args=[self.pk]) -class MemberDownloadSection(TranslatableModel): +class DownloadSection(TranslatableModel): translations = TranslatedFields( title=models.CharField(max_length=100, verbose_name='Title') ) ordering = models.IntegerField(default=50, verbose_name='Sortierung') class Meta: - verbose_name = 'Mitglieder Download Section' - verbose_name_plural = 'Mitglieder Download Sections' + verbose_name = 'Download Section' + verbose_name_plural = 'Download Sections' ordering = ['ordering'] def __str__(self): return self.title -class MemberDownloadTag(TranslatableModel): +class DownloadTag(TranslatableModel): translations = TranslatedFields( name=models.CharField(max_length=100, verbose_name='Name') ) class Meta: - verbose_name = 'Mitglieder Download Tag' - verbose_name_plural = 'Mitglieder Download Tags' + verbose_name = 'Download Tag' + verbose_name_plural = 'Download Tags' def __str__(self): return self.name @@ -100,10 +100,10 @@ else: protected_file_storage = default_storage -class MemberDownloadFile(TranslatableModel): - section = models.ForeignKey(MemberDownloadSection, verbose_name='Download Section', related_name='files') +class DownloadFile(TranslatableModel): + section = models.ForeignKey(DownloadSection, verbose_name='Download Section', related_name='files') groups = models.ManyToManyField(Group, verbose_name='Mitgliedergruppen', related_name='files') - tags = models.ManyToManyField(MemberDownloadTag, verbose_name='Suchbegriffe', related_name='files', + tags = models.ManyToManyField(DownloadTag, verbose_name='Suchbegriffe', related_name='files', blank=True, null=True) translations = TranslatedFields( @@ -115,8 +115,8 @@ class MemberDownloadFile(TranslatableModel): ordering = models.IntegerField(default=50, verbose_name='Sortierung') class Meta: - verbose_name = 'Mitglieder Download' - verbose_name_plural = 'Mitglieder Downloads' + verbose_name = 'Download File' + verbose_name_plural = 'Download Files' ordering = ['ordering'] def __str__(self): diff --git a/src/memberzone/storage.py b/src/portal/storage.py similarity index 100% rename from src/memberzone/storage.py rename to src/portal/storage.py diff --git a/src/memberzone/templates/memberzone/change_form.html b/src/portal/templates/portal/edit_form.html similarity index 100% rename from src/memberzone/templates/memberzone/change_form.html rename to src/portal/templates/portal/edit_form.html diff --git a/src/memberzone/templates/memberzone/change_success.html b/src/portal/templates/portal/edit_success.html similarity index 100% rename from src/memberzone/templates/memberzone/change_success.html rename to src/portal/templates/portal/edit_success.html diff --git a/src/memberzone/templates/memberzone/task.html b/src/portal/templates/portal/information.html similarity index 86% rename from src/memberzone/templates/memberzone/task.html rename to src/portal/templates/portal/information.html index a00d76d..677b011 100644 --- a/src/memberzone/templates/memberzone/task.html +++ b/src/portal/templates/portal/information.html @@ -7,7 +7,7 @@

{{ object.title }}

- + {% include 'project/assets/arrow-left-long.svg' %} {% trans 'Zurück zur Übersicht' %} @@ -25,11 +25,11 @@ {% block content_main %} {% render_placeholder object.placeholder language LANGUAGE_CODE %} -
+ {% csrf_token %}
- + {% include 'project/assets/arrow-left-long.svg' %} {% trans 'Zurück zur Übersicht' %} diff --git a/src/memberzone/templates/memberzone/overview.html b/src/portal/templates/portal/overview.html similarity index 97% rename from src/memberzone/templates/memberzone/overview.html rename to src/portal/templates/portal/overview.html index b5bab73..b701947 100644 --- a/src/memberzone/templates/memberzone/overview.html +++ b/src/portal/templates/portal/overview.html @@ -9,13 +9,13 @@

{% trans 'Grüezi, ' %}{{ request.user.profile.full_name }}

{% trans 'Willkommen in Ihrem persönlichen Portal der Tagesschule Elementa' %}

- + {% include 'project/assets/arrow-left-long.svg' %} {% trans 'Logout' %}
+ style="background-image: url({% static 'img/portal_background.jpg' %})">
@@ -49,7 +49,7 @@ {% if page_obj.has_next or paginator.count > 0 and open_object_list %}
- {% include 'project/assets/dots.svg' %} diff --git a/src/memberzone/templates/registration/login.html b/src/portal/templates/registration/login.html similarity index 100% rename from src/memberzone/templates/registration/login.html rename to src/portal/templates/registration/login.html diff --git a/src/portal/urls.py b/src/portal/urls.py new file mode 100644 index 0000000..e858000 --- /dev/null +++ b/src/portal/urls.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +from django.conf.urls import url +from django.contrib.auth.decorators import login_required +from django.contrib.auth.views import LoginView, LogoutView, PasswordChangeView +from django.core.urlresolvers import reverse_lazy +from django.utils.translation import ugettext_lazy as _ +from django.views.generic import TemplateView + +from portal.forms import LoginForm +from portal.views import ProfileEditView, OverviewView, InformationDetailView + +urlpatterns = [ + url(_(r'^login/$'), LoginView.as_view(form_class=LoginForm), name='login'), + + url(_(r'^logout/$'), LogoutView.as_view(next_page=reverse_lazy('portal:overview')), name='logout'), + + url(_(r'^account/change/password/$'), login_required(PasswordChangeView.as_view( + template_name='portal/edit_form.html', + success_url=reverse_lazy('portal:change_password_success') + ), login_url=reverse_lazy('portal:login')), name='change_password'), + + url(_(r'^account/change/password/success/$'), login_required(TemplateView.as_view( + template_name='portal/edit_success.html' + ), login_url=reverse_lazy('portal:login')), name='change_password_success'), + + url(_(r'^account/edit/profile/$'), login_required(ProfileEditView.as_view( + ), login_url=reverse_lazy('portal:login')), name='edit_profile'), + + url(_(r'^account/edit/profile/success/$'), login_required(TemplateView.as_view( + template_name='portal/edit_success.html' + ), login_url=reverse_lazy('portal:login')), name='edit_profile_success'), + + url(_(r'^info/(?P\d+)/$'), + login_required(InformationDetailView.as_view(), login_url=reverse_lazy('portal:login')), name='information'), + + url(_(r'^$'), login_required(OverviewView.as_view(), login_url=reverse_lazy('portal:login')), name='overview'), +] diff --git a/src/memberzone/views.py b/src/portal/views.py similarity index 62% rename from src/memberzone/views.py rename to src/portal/views.py index 2d02dca..aab6eaf 100644 --- a/src/memberzone/views.py +++ b/src/portal/views.py @@ -4,32 +4,25 @@ from django.core.urlresolvers import reverse_lazy from django.utils.translation import ugettext_lazy as _ from django.views.generic import UpdateView, ListView, DetailView -from memberzone.forms import ProfileEditForm -from memberzone.models import MemberTask, MemberDownloadFile +from portal.forms import ProfileEditForm +from portal.models import Information, DownloadFile -class MemeberTaskQuerysetMixin(object): +class InformationQuerysetMixin(object): def get_queryset(self): - queryset = MemberTask.objects.filter(groups__in=self.request.user.groups.all()) + queryset = Information.objects.filter(groups__in=self.request.user.groups.all()) if not self.request.user.is_superuser: queryset = queryset.filter(published=True) return queryset -class OverviewView(MemeberTaskQuerysetMixin, ListView): - template_name = 'memberzone/overview.html' +class OverviewView(InformationQuerysetMixin, ListView): + template_name = 'portal/overview.html' open_tasks = None - paginate_by = 5 - def get_title(self): - return _('Grüezi, {first_name} {last_name}').format( - first_name=self.request.user.first_name, - last_name=self.request.user.last_name, - ) - def get_download_sections(self): - file_list = MemberDownloadFile.objects.filter(groups__in=self.request.user.groups.all()) + file_list = DownloadFile.objects.filter(groups__in=self.request.user.groups.all()) sections = {} for file in file_list: if not sections.get(file.section_id, None): @@ -49,13 +42,13 @@ class OverviewView(MemeberTaskQuerysetMixin, ListView): return queryset.filter(informed_users__in=[self.request.user]) def get_open_tasks(self): - queryset = MemeberTaskQuerysetMixin.get_queryset(self).exclude(informed_users__in=[self.request.user]) + queryset = InformationQuerysetMixin.get_queryset(self).exclude(informed_users__in=[self.request.user]) return queryset def get_settings(self): settings = ( - (_('Benutzerdaten'), reverse_lazy('memberzone:profile_edit')), - (_('Passwort'), reverse_lazy('memberzone:change_password')), + (_('Benutzerdaten'), reverse_lazy('portal:edit_profile')), + (_('Passwort'), reverse_lazy('portal:change_password')), ) return settings @@ -74,26 +67,18 @@ class OverviewView(MemeberTaskQuerysetMixin, ListView): return context -class MemberTaskDetailView(MemeberTaskQuerysetMixin, DetailView): - template_name = 'memberzone/task.html' +class InformationDetailView(InformationQuerysetMixin, DetailView): + template_name = 'portal/information.html' def post(self, request, *args, **kwargs): self.get_object().informed_users.add(self.request.user) - return redirect('memberzone:overview') - - -class MemberTaskDetailSuccessView(MemeberTaskQuerysetMixin, DetailView): - template_name = 'memberzone/task_success.html' - model = MemberTask - - def get_title(self): - return self.object.success_title + return redirect('portal:overview') class ProfileEditView(UpdateView): form_class = ProfileEditForm - template_name = 'memberzone/change_form.html' - success_url = reverse_lazy('memberzone:profile_edit_done') + template_name = 'portal/edit_form.html' + success_url = reverse_lazy('portal:edit_profile_success') def get_object(self, queryset=None): return self.request.user.profile diff --git a/src/project/templates/main.html b/src/project/templates/main.html index 03f0389..b0272fc 100644 --- a/src/project/templates/main.html +++ b/src/project/templates/main.html @@ -121,7 +121,7 @@