Fehler bei Vergabe von Bonuspunkte korrigiert.

Kommentare für Bonuspunkte werden jetzt als Kommentar beim Spieler hinterlassen, nicht als Kommentar in der Hanchan.
FIXED: 3_in_a_row counter wurde nicht zurückgesetzt wenn Bonuspunkte vergeben wurden.
FIXED: Durchschnittliche Platzierung während eines Events wurde nur als Ganzzahl berechnet. Wird nun als Fießkomma berechnet und gesichert.
This commit is contained in:
Christian Berg
2016-01-09 22:55:26 +01:00
parent ff330d5aeb
commit 7e55faa05c
157 changed files with 2571 additions and 2835 deletions

View File

@@ -15,12 +15,12 @@ def content_menus(request):
current_path = request.path_info[1:request.path_info.rfind('.')]
# erzeuge das Top-Level Menü
top_menu_items = []
top_level_pages = cache.get('top_level_pages')
if top_level_pages is None:
top_level_pages = models.Page.objects.filter(parent=None)
top_level_pages = top_level_pages.exclude(slug='index')
top_level_pages = top_level_pages.order_by('position')
top_level_pages = top_level_pages.prefetch_related('subpages')
cache.set('top_level_pages', top_level_pages, 360)
for item in top_level_pages:
if current_path.startswith(item.path):
@@ -28,7 +28,6 @@ def content_menus(request):
current_top_page = item
else:
item.active = False
top_menu_items.append(item)
# Entdecke die aktuell geöffnete Seite
all_pages = cache.get('all_pages')
@@ -43,8 +42,8 @@ def content_menus(request):
break
current_path = current_path[0:current_path.rfind('.')]
return {'top_menu_items': top_menu_items,
return {'top_menu_items': top_level_pages,
'current_top_page': current_top_page,
'current_path': current_path,
'current_page': current_page
}
}

View File

@@ -9,8 +9,6 @@ from django.utils.feedgenerator import Rss201rev2Feed
from models import Article
# noinspection PyMethodMayBeStatic
class LatestNews(Feed):
link = "http://www.kasu.at/"
description = _("Current news from Kasu")

View File

@@ -12,12 +12,11 @@ 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'], )
# print facebook_page
# print graph_api.get_connections(facebook_page['id'], )
self.login()
def login(self):
@@ -31,4 +30,4 @@ class Command(BaseCommand):
print request
response = request.read()
print response
print json.loads(response)
print json.loads(response)

View File

@@ -7,7 +7,6 @@ from django.conf import settings
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
@@ -16,17 +15,36 @@ class Migration(migrations.Migration):
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)),
('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)),
('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',),
@@ -37,12 +55,22 @@ class Migration(migrations.Migration):
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)),
('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={
@@ -54,23 +82,57 @@ class Migration(migrations.Migration):
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)),
('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)),
('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'],
@@ -81,7 +143,8 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='article',
name='category',
field=models.ForeignKey(verbose_name='Kategorie', to='content.Category'),
field=models.ForeignKey(
verbose_name='Kategorie', to='content.Category'),
),
migrations.AlterUniqueTogether(
name='page',

View File

@@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import ckeditor.fields
class Migration(migrations.Migration):
dependencies = [
('content', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='article',
name='content_de',
field=ckeditor.fields.RichTextField(verbose_name='Inhalt'),
),
migrations.AlterField(
model_name='article',
name='content_en',
field=ckeditor.fields.RichTextField(
verbose_name=b'Content', blank=True),
),
migrations.AlterField(
model_name='page',
name='content_de',
field=ckeditor.fields.RichTextField(
verbose_name=b'Inhalt', blank=True),
),
migrations.AlterField(
model_name='page',
name='content_en',
field=ckeditor.fields.RichTextField(
verbose_name=b'Content', blank=True),
),
]

View File

@@ -11,9 +11,6 @@ from django.utils.safestring import mark_safe
from django.utils.translation import get_language, ugettext as _
from django.core.exceptions import ValidationError
from ckeditor.fields import RichTextField
from kasu.image_models import ImageModel
from utils import STATUS_CHOICES, STATUS_WAITING, STATUS_PUBLISHED, \
cleaner
@@ -42,11 +39,15 @@ def get_upload_path(instance, filename):
class ArticleManager(models.Manager):
def get_queryset(self):
return super(ArticleManager, self).get_queryset().select_related('author', 'category')
def published(self):
return self.filter(status=STATUS_PUBLISHED, date_created__lte=now())
class Article(ImageModel):
class Article(models.Model):
headline_de = models.CharField(_('Headline'), max_length=255)
headline_en = models.CharField('Headline', max_length=255, blank=True)
content_de = RichTextField(_('Content'))
@@ -80,11 +81,11 @@ class Article(ImageModel):
return self.headline
@property
def posting_image(self):
def get_image(self):
if self.image:
return self.article
return self.image
else:
return self.category.article
return self.category.image
def get_absolute_url(self):
kwargs = {
@@ -219,7 +220,7 @@ class Page(models.Model):
verbose_name_plural = _('Pages')
class Category(ImageModel):
class Category(models.Model):
name_de = models.CharField(_('Name'), max_length=80)
name_en = models.CharField(_('Name'), max_length=80, blank=True)
description_de = models.TextField(_('Description'))

View File

@@ -27,4 +27,4 @@ urlpatterns = patterns(
ArticleYearArchive.as_view(), name='article-archive'),
url(r'^(?P<category>[\-\d\w]+)/(?P<year>[\d]{4})/(?P<month>[\d]+)/$',
ArticleMonthArchive.as_view(), name='article-archive'),
)
)

View File

@@ -1,32 +1,33 @@
{% extends "base.html" %}
{% load i18n comments %}
{% load i18n comments thumbnail %}
{% block title %}
{% trans 'Article Archive' %}
{% if active_category %} - {{active_category.name}}{% endif %}
{% if month %}{{ month|date:'F Y' }}</h2>{% elif year %}{{year}}{% endif %}
{% if month %}{{ month|date:'F Y' }}{% elif year %}{{year}}{% endif %}
{% endblock %}
{% block meta_title %}
{% trans 'Article Archive' %}
{% if active_category %} - {{active_category.name}}{% endif %}
{% if month %}{{ month|date:'F Y' }}</h2>{% elif year %}{{year}}{% endif %}
{% endblock %}
{% block jumbotron_background %}{% spaceless %}
{% if active_category %}
{{ active_category.image.url }}
{% else %}
{{STATIC_URL}}img/teaser/{{current_top_page.slug}}.jpg
{% endif %}
{% endspaceless %}{% endblock %}
{% block jumbotron_background %}{% if active_category %}{{ active_category.image.url }}{% else %}{{STATIC_URL}}img/teaser/{{current_top_page.slug}}.jpg{% endif %}{% endblock %}
{% block teaser %}<h1>
{% block teaser %}
<h1>
{% trans 'Article Archive' %}
{% if active_category %} - {{active_category.name}}{% endif %}
{% if month %}{{ month|date:'F Y' }}{% elif year %}{{year}}{% endif %}
</h1>
<div id="teaser_text">
{% if active_category %}
</h1>
<div id="teaser_text">
{% if active_category %}
<p>{{ active_category.description }}</p>
{% else %}
{% else %}
{{current_page.content|safe}}
{% endif %}
</div>
{% endif %}
</div>
{% endblock %}
{% block redbox %}
@@ -67,7 +68,7 @@
<li><span class="fa fa-user" title="{% trans 'by' %}"></span> {{ 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" width="200" height="120"/></a>
<a href="{{article.get_absolute_url}}"><img src="{{article.get_image|thumbnail_url:'article'}}" 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"%} <span class="fa fa-arrow-right"></span></a></p>
</article>

View File

@@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n comments %}
{% load i18n comments thumbnail %}
{% block title %}{{ article.headline }}{% endblock %}
@@ -9,9 +9,9 @@
<meta property="og:type" content="article" />
<meta property="og:title" content="{{ article.headline|force_escape }}" />
<meta property="og:url" content="http://www.kasu.at{{ article.get_absolute_url }}" />
<meta property="og:image" content="http://www.kasu.at{{article.posting_image.url}}" />
<meta property="og:image" content="http://www.kasu.at{{article.get_image|thumbnail_url:'article'}}" />
<meta property="og:description" content="{{article.content|striptags|truncatewords:25|force_escape}}" />
<link rel="image_src" type="image/jpeg" href="{{article.posting_image.url}}" />
<link rel="image_src" type="image/jpeg" href="{{article.get_image|thumbnail_url:'article'}}" />
{% endblock %}
{% block itemscope %}itemscope itemtype="http://schema.org/Article"{% endblock %}
@@ -21,7 +21,7 @@
<div id="teaser_text">
<ul class="info">
<li><span class="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 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 fa-calendar-o"></span> <strong>{% trans 'Created on' %}: </strong><time datetime="{{article.date_created|date:'Y-m-d H:i'}}">{{ article.date_created|date:'DATE_FORMAT' }}</time></li>
<li><span class="fa fa-tag"></span> <strong>{% trans "Category"%}: </strong><a href="{{ article.category.get_absolute_url }}" itemprop="articleSection">{{article.category.name}}</a></li>
</ul>
</div>
@@ -29,7 +29,7 @@
{% block maincontent %}
<div itemprop="articleBody" class="grid_12">
<img alt="{{article.category.name}}" src="{{article.posting_image.url}}" class="posting_image" itemprop="image"/>
<img alt="{{article.category.name}}" src="{{article.get_image|thumbnail_url:'article'}}" class="posting_image" itemprop="image"/>
{{ article.content }}
</div>
<p class="right">

View File

@@ -13,6 +13,7 @@ register = template.Library()
class FieldSetNode(template.Node):
def __init__(self, form_variable, variable_name, fields):
self.fields = fields
self.variable_name = variable_name

View File

@@ -9,6 +9,7 @@ from django.test import TestCase
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.

View File

@@ -12,4 +12,4 @@ urlpatterns = patterns(
'content.views',
url(r'^image_list.js$', ImageList.as_view(), name='content-image-list'),
url(r'^link_list.js$', PageList.as_view(), name='content-page-list'),
)
)

View File

@@ -8,15 +8,16 @@ from django.utils.translation import ugettext as _
from django.views import generic
from . import models, forms
from aggregator.models import Feed
from events.models import Photo
from utils.mixins import PermissionRequiredMixin
class ArticleArchiveMixin(object):
def get_category(self, queryset):
try:
self.category = models.Category.objects.get(slug=self.kwargs['category'])
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."))
@@ -28,7 +29,6 @@ class ArticleArchiveMixin(object):
context = super(ArticleArchiveMixin, self).get_context_data(**kwargs)
context['categories'] = models.Category.objects.all()
context['active_category'] = self.category
context['feeds'] = Feed.objects.active()
return context
@@ -99,6 +99,7 @@ class ArticleForm(PermissionRequiredMixin, generic.UpdateView):
class ImageList(generic.View):
# noinspection PyMethodMayBeStatic
def get(self, kwargs):
image_list = []
response = HttpResponse(content_type='text/javascript')
@@ -146,6 +147,7 @@ class PageEditForm(PermissionRequiredMixin, generic.UpdateView):
class PageHtml(generic.DetailView):
def get_object(self, queryset=None):
try:
return models.Page.objects.get(path=self.kwargs['path'],
@@ -160,6 +162,7 @@ class PageHtml(generic.DetailView):
class PagePdf(generic.DeleteView):
def get_object(self, queryset=None):
try:
return models.Page.objects.get(path=self.kwargs['path'],
@@ -183,6 +186,7 @@ class PagePdf(generic.DeleteView):
class PageList(generic.View):
# noinspection PyMethodMayBeStatic
def get(self, kwargs):
response = HttpResponse(content_type='text/javascript')
response.write('var tinyMCELinkList = new Array(')
@@ -212,7 +216,7 @@ class StartPage(generic.TemplateView):
context = {
'title': page.title,
'content': page.content,
'random_photo': random_photo.callout,
'random_photo': random_photo,
'recent_article_list': models.Article.objects.published()[:3],
'recent_comment_list': recent_comment_list,
}