Vereinfachung Membership ist nun ein custom login model, keine Abhängikeiten mehr zu auth.User.
absofort können alle Benutzer ins Ranking eingetragen werden und nicht mehr nur "zahlende Mitglieder".
This commit is contained in:
committed by
Christian Berg
parent
37d3cb78c1
commit
617b7131fe
34
src/content/management/commands/syncfacebook.py
Normal file
34
src/content/management/commands/syncfacebook.py
Normal file
@@ -0,0 +1,34 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
__author__ = 'Christian Berg'
|
||||
|
||||
import urllib
|
||||
|
||||
from datetime import datetime
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.conf import settings
|
||||
import json
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "Synchornisiert den Facenbook Feed für die Anzeige auf der Homepage"
|
||||
|
||||
|
||||
def handle(self, *args, **options):
|
||||
#graph_api = facebook.GraphAPI(settings.FACEBOOK_ACCESS_TOKEN)
|
||||
#facebook_page = graph_api.get_object(settings.FACEBOOK_APP_ID+'/feed/')
|
||||
#print facebook_page
|
||||
#print graph_api.get_connections(facebook_page['id'], )
|
||||
self.login()
|
||||
|
||||
def login(self):
|
||||
args = {'access_token': settings.FACEBOOK_ACCESS_TOKEN}
|
||||
query = "https://graph.facebook.com/{object}/feed?{args}".format(
|
||||
object=settings.FACEBOOK_APP_ID,
|
||||
args=urllib.urlencode(args),
|
||||
)
|
||||
print query
|
||||
request = urllib.urlopen(query)
|
||||
print request
|
||||
response = request.read()
|
||||
print response
|
||||
print json.loads(response)
|
||||
90
src/content/migrations/0001_initial.py
Normal file
90
src/content/migrations/0001_initial.py
Normal file
@@ -0,0 +1,90 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Article',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('headline_de', models.CharField(max_length=255, verbose_name='Schlagzeile')),
|
||||
('headline_en', models.CharField(max_length=255, verbose_name=b'Headline', blank=True)),
|
||||
('content_de', models.TextField(verbose_name='Inhalt')),
|
||||
('content_en', models.TextField(verbose_name=b'Content', blank=True)),
|
||||
('image', models.ImageField(upload_to=b'news/', null=True, verbose_name='Bild', blank=True)),
|
||||
('slug', models.SlugField(unique_for_month=b'date_created', verbose_name='Slug')),
|
||||
('status', models.SmallIntegerField(default=1, verbose_name='Status', choices=[(-1, 'Zur\xfcckgewiesen'), (0, 'Wartend...'), (1, 'Ver\xf6ffentlicht')])),
|
||||
('date_created', models.DateTimeField(verbose_name='Erstellt', blank=True)),
|
||||
('date_modified', models.DateTimeField(auto_now=True, verbose_name='Bearbeitet')),
|
||||
('author', models.ForeignKey(verbose_name='Autor', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'ordering': ('-date_created',),
|
||||
'verbose_name': 'Artikel',
|
||||
'verbose_name_plural': 'Artikel',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Category',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('name_de', models.CharField(max_length=80, verbose_name='Name')),
|
||||
('name_en', models.CharField(max_length=80, verbose_name='Name', blank=True)),
|
||||
('description_de', models.TextField(verbose_name='Beschreibung')),
|
||||
('description_en', models.TextField(verbose_name='Beschreibung', blank=True)),
|
||||
('image', models.ImageField(upload_to=b'news/categories/', null=True, verbose_name='Bild', blank=True)),
|
||||
('slug', models.SlugField(unique=True, verbose_name='Slug')),
|
||||
],
|
||||
options={
|
||||
'ordering': ('slug',),
|
||||
'verbose_name': 'Kategorie',
|
||||
'verbose_name_plural': 'Kategorien',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Page',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('menu_name_de', models.CharField(help_text='Ein kurzer Name f\xfcr den Men\xfceintrag', max_length=255, verbose_name=b'Men\xc3\xbc Name')),
|
||||
('menu_name_en', models.CharField(help_text='Ein kurzer Name f\xfcr den Men\xfceintrag', max_length=255, verbose_name=b'Menu Name', blank=True)),
|
||||
('title_de', models.CharField(help_text='Der Titel erscheint im HTML Header', max_length=255, verbose_name=b'Titel')),
|
||||
('title_en', models.CharField(help_text='Der Titel erscheint im HTML Header', max_length=255, verbose_name=b'Title', blank=True)),
|
||||
('slug', models.SlugField(verbose_name='Slug')),
|
||||
('path', models.CharField(verbose_name='Pfad', unique=True, max_length=100, editable=False, db_index=True)),
|
||||
('position', models.PositiveSmallIntegerField(null=True, verbose_name='Position', blank=True)),
|
||||
('status', models.SmallIntegerField(default=0, verbose_name='Status', choices=[(-1, 'Zur\xfcckgewiesen'), (0, 'Wartend...'), (1, 'Ver\xf6ffentlicht')])),
|
||||
('content_type', models.IntegerField(choices=[(0, 'Django View'), (1, 'HTML'), (2, 'PDF')])),
|
||||
('content_de', models.TextField(verbose_name=b'Inhalt', blank=True)),
|
||||
('content_en', models.TextField(verbose_name=b'Content', blank=True)),
|
||||
('enable_comments', models.BooleanField(default=True, verbose_name='Kommentare m\xf6glich')),
|
||||
('template', models.CharField(default=b'content/page.html', max_length=100, verbose_name='Vorlage')),
|
||||
('pdf_de', models.FileField(null=True, upload_to=b'pdf/de/', blank=True)),
|
||||
('pdf_en', models.FileField(null=True, upload_to=b'pdf/en/', blank=True)),
|
||||
('parent', models.ForeignKey(related_name='subpages', on_delete=django.db.models.deletion.SET_NULL, blank=True, to='content.Page', null=True)),
|
||||
],
|
||||
options={
|
||||
'ordering': ['parent__id', 'position'],
|
||||
'verbose_name': 'Seite',
|
||||
'verbose_name_plural': 'Seiten',
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='article',
|
||||
name='category',
|
||||
field=models.ForeignKey(verbose_name='Kategorie', to='content.Category'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='page',
|
||||
unique_together=set([('slug', 'parent')]),
|
||||
),
|
||||
]
|
||||
0
src/content/migrations/__init__.py
Normal file
0
src/content/migrations/__init__.py
Normal file
@@ -30,14 +30,14 @@
|
||||
{% block redbox %}
|
||||
{% block date_list %}
|
||||
<h2>{% trans "Archive" %} {{year}}</h2>
|
||||
<ul class="list" style="margin: 20px;">
|
||||
<ul class="fa-ul">
|
||||
{% if active_category %}
|
||||
{% for date in date_list %}
|
||||
<li class="date"><a href="{% url 'article-archive' category=active_category.slug year=date|date:'Y' %}">{{active_category.name}}: {{ date|date:'Y' }}</a></li>
|
||||
<li><span class="fa fa-calendar-o fa-fw"></span> <a href="{% url 'article-archive' category=active_category.slug year=date|date:'Y' %}">{{active_category.name}}: {{ date|date:'Y' }}</a></li>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
{% for date in date_list %}
|
||||
<li class="date"><a href="{% url 'article-archive' year=date|date:'Y' %}">{{ date|date:'Y' }}</a></li>
|
||||
<li><span class="fa fa-calendar-o fa-fw"></span> <a href="{% url 'article-archive' year=date|date:'Y' %}">{{ date|date:'Y' }}</a></li>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</ul>
|
||||
@@ -61,13 +61,13 @@
|
||||
<article class="article">
|
||||
<h3><a href="{{article.get_absolute_url}}">{{article.headline}}</a></h3>
|
||||
<ul class="info">
|
||||
<li><img src="{{STATIC_URL}}icons/calendar.png" alt="{% trans 'created on' %}:" title="{% trans 'created on' %}"/> <time datetime="{{article.date_created|date:'c'}}">{{ article.date_created|date }}</time></li>
|
||||
<li><img src="{{STATIC_URL}}icons/user_red.png" alt="{% trans 'by' %}:" title="{% trans 'by' %}"/> <span class="author">{{ article.author }}</span></li>
|
||||
<li><img src="{{STATIC_URL}}icons/comments.png" alt="{% trans 'comments' %}:" title="{% trans 'comments' %}"/> <a href="{{article.get_absolute_url}}#comments" >{{comment_count}} {% trans "comments" %}</a></li>
|
||||
<li><span class="fa fa-calendar-o" title="{% trans 'created on' %}"></span> <time datetime="{{article.date_created|date:'c'}}">{{ article.date_created|date }}</time></li>
|
||||
<li><span class="fa fa-user" title="{% trans 'by' %}"/> {{ article.author }}</li>
|
||||
<li><span class="fa fa-comments" title="{% trans 'comments' %}"></span> <a href="{{article.get_absolute_url}}#comments" >{{comment_count}} {% trans "comments" %}</a></li>
|
||||
</ul>
|
||||
<a href="{{article.get_absolute_url}}"><img src="{{article.posting_image.url}}" alt="{{article.category}}:" class="posting_image"/></a>
|
||||
<a href="{{article.get_absolute_url}}"><img src="{{article.posting_image.url}}" alt="{{article.category}}:" class="posting_image" width="200" height="120"/></a>
|
||||
{{article.content|truncatewords_html:50}}
|
||||
<p class="more_link"><a href="{{article.get_absolute_url}}" class="button">{% trans "Read More"%} <img src="{{STATIC_URL}}icons/page_go.png" alt="»" /></a></p>
|
||||
<p class="more_link"><a href="{{article.get_absolute_url}}" class="button">{% trans "Read More"%} <span class="fa fa-arrow-right"></span></a></p>
|
||||
</article>
|
||||
{% empty %}
|
||||
<p>{% trans "We're sorry. Your search yielded no results." %}</p>
|
||||
@@ -88,6 +88,6 @@
|
||||
|
||||
{% block additional_buttonbar %}
|
||||
{% if perms.content.add_article %}
|
||||
<a href="{% url 'add-article' %}" class="button"><img src="{{ STATIC_URL }}icons/note_add.png" alt="" /> {% trans "Add Article" %}</a>
|
||||
<a href="{% url 'add-article' %}" class="button"><span class="fa fa-newspaper-o"></span> {% trans "Add Article" %}</a>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -4,6 +4,6 @@
|
||||
{% block date_list %}
|
||||
<h2>{% trans "Archive" %} {{month|date:'E'}}</h2>
|
||||
<div class="buttonbar">
|
||||
<a href="{% url 'article-archive' year=month|date:'Y' %}" class="button"><img src="{{ STATIC_URL }}icons/arrow_undo.png" alt="{% trans 'back' %}" /> {% trans 'back' %}</a>
|
||||
<a href="{% url 'article-archive' year=month|date:'Y' %}" class="button"><span class="fa fa-undo"></span> {% trans 'back' %}</a>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
{% block date_list %}
|
||||
<h2>{% trans "Archive" %} {{year}}</h2>
|
||||
|
||||
<ul class="list" style="margin: 20px;">
|
||||
<ul class="fa-ul">
|
||||
{% if active_category %}
|
||||
{% for date in date_list %}
|
||||
<li class="date"><a href="{% url 'article-archive' category=active_category.slug year=year|date:'Y' month=date|date:'m' %}">{{active_category.name}}: {{ date|date:'F' }}</a></li>
|
||||
<li><span class="fa fa-calendar-o fa-fw"></span> <a href="{% url 'article-archive' category=active_category.slug year=year|date:'Y' month=date|date:'m' %}">{{active_category.name}}: {{ date|date:'F' }}</a></li>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
{% for date in date_list %}
|
||||
<li class="date"><a href="{% url 'article-archive' year=year|date:'Y' month=date|date:'m' %}">{{ date|date:'F' }}</a></li>
|
||||
<li><span class="fa fa-calendar-o fa-fw"></span> <a href="{% url 'article-archive' year=year|date:'Y' month=date|date:'m' %}">{{ date|date:'F' }}</a></li>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</ul>
|
||||
|
||||
@@ -28,10 +28,10 @@
|
||||
<img alt="{{article.category.name}}" src="{{article.posting_image.url}}" class="posting_image" itemprop="image"/>
|
||||
<p> </p>
|
||||
|
||||
<ul class="info">
|
||||
<li class="user"><strong>{% trans 'Author' %}:</strong> <a href="{% url 'membership-details' article.author %}" itemprop="author">{{article.author}}</a></li>
|
||||
<li class="date"><strong>{% trans 'Created on' %}: </strong><time datetime="{{article.date_created|date:'Y-m-d H:i'}}">{{ article.date_created|date }}</time></li>
|
||||
<li class="category"><strong>{% trans "Category"%}: </strong><a href="{{ article.category.get_absolute_url }}" itemprop="articleSection">{{article.category.name}}</a></li>
|
||||
<ul class="fa-ul">
|
||||
<li><span class="fa-li fa fa-user"></span> <strong>{% trans 'Author' %}:</strong> <a href="{% url 'membership-details' article.author %}" itemprop="author">{{article.author}}</a></li>
|
||||
<li><span class="fa-li fa fa-calendar-o"></span> <strong>{% trans 'Created on' %}: </strong><time datetime="{{article.date_created|date:'Y-m-d H:i'}}">{{ article.date_created|date }}</time></li>
|
||||
<li><span class="fa-li fa fa-tag"></span> <strong>{% trans "Category"%}: </strong><a href="{{ article.category.get_absolute_url }}" itemprop="articleSection">{{article.category.name}}</a></li>
|
||||
</ul>
|
||||
|
||||
<p class="center">
|
||||
@@ -49,6 +49,6 @@
|
||||
|
||||
{% block buttonbar %}
|
||||
{% if perms.content.change_article %}
|
||||
<a href="{% url 'edit-article' article.id %}" class="button"><img src="{{STATIC_URL}}icons/note_edit.png" alt="" />{% trans "Edit Article" %}</a>
|
||||
<a href="{% url 'edit-article' article.id %}" class="button"><span class="fa fa-pencil"></span> {% trans "Edit Article" %}</a>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
@@ -33,8 +33,8 @@
|
||||
</fieldset>
|
||||
</div>
|
||||
<p class="buttonbar">
|
||||
<button type="reset"><img src="{{STATIC_URL}}icons/arrow_undo.png" alt="{% trans 'reset' %}" /> {% trans 'reset' %}</button>
|
||||
<button type="submit"><img src="{{STATIC_URL}}icons/disk.png" alt="{% trans 'save' %}" /> {% trans 'save' %}</button>
|
||||
<button type="reset"><span class="fa fa-undo"></span> {% trans 'reset' %}</button>
|
||||
<button type="submit"><span class="fa fa-hdd-o"></span> {% trans 'save' %}</button>
|
||||
</p>
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
||||
@@ -58,8 +58,8 @@
|
||||
</fieldset>
|
||||
|
||||
<p class="buttonbar">
|
||||
<button type="reset"><img src="{{STATIC_URL}}icons/arrow_undo.png" alt="{% trans 'reset' %}" /> {% trans 'reset' %}</button>
|
||||
<button type="submit"><img src="{{STATIC_URL}}icons/page_save.png" alt="{% trans 'save' %}" /> {% trans 'save' %}</button>
|
||||
<button type="reset"><span class="fa fa-undo"></span> {% trans 'reset' %}</button>
|
||||
<button type="submit"><span class="fa fa-hdd-o"></span> {% trans 'save' %}</button>
|
||||
</p>
|
||||
</form>
|
||||
|
||||
|
||||
@@ -1,21 +1,29 @@
|
||||
# Create your views here.
|
||||
import os
|
||||
|
||||
from django.conf import settings
|
||||
import django_comments as comments
|
||||
|
||||
import os
|
||||
from django.conf import settings
|
||||
from django.http import HttpResponse, Http404
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.views import generic
|
||||
from django.shortcuts import get_object_or_404
|
||||
|
||||
from . import models, forms
|
||||
from aggregator.models import Feed
|
||||
from events.models import Photo
|
||||
from utils.mixins import PermissionRequiredMixin
|
||||
import events.models
|
||||
|
||||
|
||||
class ArticleArchiveMixin(object):
|
||||
def get_category(self, queryset):
|
||||
try:
|
||||
self.category = models.Category.objects.get(slug=self.kwargs['category'])
|
||||
return queryset.filter(category=self.category)
|
||||
except models.Category.DoesNotExist:
|
||||
raise Http404(_("This Category does not exist."))
|
||||
except KeyError:
|
||||
self.category = None
|
||||
return self.queryset
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(ArticleArchiveMixin, self).get_context_data(**kwargs)
|
||||
context['categories'] = models.Category.objects.all()
|
||||
@@ -24,7 +32,6 @@ class ArticleArchiveMixin(object):
|
||||
return context
|
||||
|
||||
|
||||
# noinspection PyAttributeOutsideInit
|
||||
class ArticleArchiveIndex(ArticleArchiveMixin, generic.ArchiveIndexView):
|
||||
queryset = models.Article.objects.filter(status=models.STATUS_PUBLISHED)
|
||||
date_field = 'date_created'
|
||||
@@ -34,13 +41,7 @@ class ArticleArchiveIndex(ArticleArchiveMixin, generic.ArchiveIndexView):
|
||||
|
||||
def get_queryset(self):
|
||||
queryset = generic.ArchiveIndexView.get_queryset(self)
|
||||
self.category = self.kwargs.get('category')
|
||||
if self.category:
|
||||
try:
|
||||
self.category = models.Category.objects.get(slug=self.category)
|
||||
queryset = queryset.filter(category=self.category)
|
||||
except models.Category.DoesNotExist:
|
||||
raise Http404(_("This Category does not exist."))
|
||||
queryset = self.get_category(queryset)
|
||||
return queryset
|
||||
|
||||
|
||||
@@ -54,11 +55,7 @@ class ArticleYearArchive(ArticleArchiveMixin, generic.YearArchiveView):
|
||||
|
||||
def get_queryset(self):
|
||||
queryset = generic.YearArchiveView.get_queryset(self)
|
||||
self.category = self.kwargs.get('category')
|
||||
if self.category:
|
||||
self.category = get_object_or_404(models.Category,
|
||||
slug=self.category)
|
||||
queryset = queryset.filter(category=self.category)
|
||||
queryset = self.get_category(queryset)
|
||||
return queryset
|
||||
|
||||
|
||||
@@ -72,10 +69,7 @@ class ArticleMonthArchive(ArticleArchiveMixin, generic.MonthArchiveView):
|
||||
|
||||
def get_queryset(self):
|
||||
queryset = generic.MonthArchiveView.get_queryset(self)
|
||||
self.category = self.kwargs.get('category')
|
||||
if self.category:
|
||||
self.category = models.Category.objects.get(slug=self.category)
|
||||
queryset = queryset.filter(category=self.category)
|
||||
queryset = self.get_category(queryset)
|
||||
return queryset
|
||||
|
||||
|
||||
@@ -208,7 +202,7 @@ class StartPage(generic.TemplateView):
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
page = models.Page.objects.get(slug='index')
|
||||
random_photo = events.models.Photo.objects.get_random(startpage=True)
|
||||
random_photo = Photo.objects.get_random(startpage=True)
|
||||
recent_comment_list = comments.get_model().objects.filter(
|
||||
site__pk=settings.SITE_ID,
|
||||
is_public=True,
|
||||
|
||||
Reference in New Issue
Block a user