Browse Source

Merge branch 'master' of atrey.karlin.mff.cuni.cz:/akce/MaM/MaMweb/mamweb

remotes/origin/upgrade1.9
parent
commit
f309affdd8
  1. 25
      galerie/admin.py
  2. 49
      galerie/autocomplete_light_registry.py
  3. 6
      galerie/models.py
  4. 16
      seminar/templates/seminar/titulnistrana.html
  5. 20
      seminar/views.py

25
galerie/admin.py

@ -3,6 +3,9 @@
from galerie.models import Obrazek, Galerie from galerie.models import Obrazek, Galerie
from django.contrib import admin from django.contrib import admin
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django import forms
from django.db import models
import autocomplete_light
# akction # akction
@ -27,17 +30,25 @@ def prepnout_fotogalerii_do_org_rezimu(modeladmin, request, queryset):
'Přepnout do režimu úprav (zneveřejní galerii)' 'Přepnout do režimu úprav (zneveřejní galerii)'
class GalerieInline(admin.TabularInline): class GalerieInline(admin.TabularInline):
model = Obrazek model = Obrazek
fields = ['obrazek_velky', 'nazev', 'popis', 'obrazek_maly_tag']
readonly_fields = ['nazev', 'obrazek_maly_tag']
formfield_overrides = {
models.TextField: {'widget': forms.TextInput},
}
class ObrazekAdmin(admin.ModelAdmin): class ObrazekAdmin(admin.ModelAdmin):
list_display = ('obrazek_velky', 'nazev', 'popis') list_display = ('obrazek_velky', 'nazev', 'popis', 'obrazek_maly_tag')
class GalerieAdmin(admin.ModelAdmin): class GalerieAdmin(admin.ModelAdmin):
model = Galerie form = autocomplete_light.modelform_factory(Galerie, autocomplete_fields=['titulni_obrazek'], fields=['titulni_obrazek'])
fields = ('zobrazit', 'nazev', 'titulni_obrazek', 'popis', 'galerie_up', 'soustredeni', 'poradi') model = Galerie
list_display = ('nazev', 'pk', 'datum_zmeny', 'zobrazit', 'soustredeni') fields = ('zobrazit', 'nazev', 'titulni_obrazek', 'popis', 'galerie_up', 'soustredeni', 'poradi')
inlines = [GalerieInline] list_display = ('nazev', 'pk', 'poradi', 'datum_zmeny', 'zobrazit', 'soustredeni')
actions = [zverejnit_fotogalerii, prepnout_fotogalerii_do_org_rezimu] inlines = [GalerieInline]
actions = [zverejnit_fotogalerii, prepnout_fotogalerii_do_org_rezimu]
save_on_top = True
ordering = ['galerie_up__nazev', 'poradi']
admin.site.register(Obrazek, ObrazekAdmin) admin.site.register(Obrazek, ObrazekAdmin)
admin.site.register(Galerie, GalerieAdmin) admin.site.register(Galerie, GalerieAdmin)

49
galerie/autocomplete_light_registry.py

@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import autocomplete_light
from models import Obrazek, Galerie
from views import cesta_od_korene
class ObrazekAutocomplete(autocomplete_light.AutocompleteModelBase):
model = Obrazek
search_fields = ['nazev', 'popis']
split_words = True
limit_choices = 15
attrs = {
# This will set the input placeholder attribute:
'placeholder': u'Obrázek',
# This will set the yourlabs.Autocomplete.minimumCharacters
# options, the naming conversion is handled by jQuery
'data-autocomplete-minimum-characters': 1,
}
choice_html_format = '''
<span class="block" data-value="{}">
<span class="block">
{}
<span class="block">{}</span>
</span>
</span>
'''
def choice_label(self, obrazek):
cesta = "/".join(g.nazev for g in cesta_od_korene(obrazek.galerie))
popis = "{}<br>".format(obrazek.popis) if obrazek.popis else ""
return '{}<br>{}{}'.format(obrazek.nazev, popis, cesta)
def choice_html(self, obrazek):
"""Vrátí kus html i s obrázkem, které se pak ukazuje v nabídce"""
return self.choice_html_format.format(self.choice_value(obrazek),
obrazek.obrazek_maly_tag(), self.choice_label(obrazek))
widget_attrs={
'data-widget-maximum-values': 15,
'class': 'modern-style',
}
autocomplete_light.register(ObrazekAutocomplete)

6
galerie/models.py

@ -57,6 +57,12 @@ class Obrazek(models.Model):
verbose_name_plural = 'Obrázky' verbose_name_plural = 'Obrázky'
ordering = ['nazev'] ordering = ['nazev']
def obrazek_maly_tag(self):
return u'<img src="{}">'.format(self.obrazek_maly.url)
obrazek_maly_tag.short_description = "Náhled"
obrazek_maly_tag.allow_tags = True
class Galerie(models.Model): class Galerie(models.Model):
nazev = models.CharField('Název', max_length=100) nazev = models.CharField('Název', max_length=100)

16
seminar/templates/seminar/titulnistrana.html

@ -22,23 +22,9 @@ M&amp;M je korespondeční seminář. Několikrát do roka zdarma vydáváme ča
<div class="odpocet"> <div class="odpocet">
<p><b>Do konce <a href="https://mam.mff.cuni.cz/zadani/aktualni/">odeslání řešení</a> zbývá:<br> <p><b>Do konce <a href="https://mam.mff.cuni.cz/zadani/aktualni/">odeslání řešení</a> zbývá:<br>
<big>{{ted|timesince:dead}}</big></b></p> <big>{{ted|timesince:dead}}</big></b></p>
<!--
{{cas_do_konce_dni}} dní
{% if cas_do_konce_dni < 5 %}
{{cas_do_konce_hodin}} hodin
{% if cas_do_konce_hodin < 5 %}
{{cas_do_konce_minut}} minut
{% if cas_do_konce_minut < 5 %}
{{cas_do_konce_sekund}}
{% endif %}
{% endif %}
{% endif %}
-->
</div> </div>
{% endif %} {% endif %}
{# Novinky #} {# Novinky #}
<h2>Novinky</h2> <h2>Novinky</h2>
{% include 'seminar/novinky.html' %} {% include 'seminar/novinky.html' %}

20
seminar/views.py

@ -73,16 +73,16 @@ class TitulniStranaView(generic.ListView):
context = super(TitulniStranaView, self).get_context_data(**kwargs) context = super(TitulniStranaView, self).get_context_data(**kwargs)
nastaveni = get_object_or_404(Nastaveni) nastaveni = get_object_or_404(Nastaveni)
cas_deadline = nastaveni.aktualni_cislo.datum_deadline cas_deadline = nastaveni.aktualni_cislo.datum_deadline
try: # Pokud neni zverejnene cislo nezverejnuj odpocet
rozdil_casu = datetime.combine(cas_deadline, datetime.max.time()) \ if nastaveni.aktualni_cislo.verejne():
- datetime.now() # pokus se zjistit termin odeslani a pokud neni zadany,
context['cas_do_konce_dni'] = rozdil_casu.days # nezverejnuj odpocet
context['cas_do_konce_hodin'] = rozdil_casu.seconds / 3600 try:
context['cas_do_konce_minut'] = (rozdil_casu.seconds / 60) % 60 context['dead'] = datetime.combine(cas_deadline, datetime.max.time())
context['cas_do_konce_sekund'] = rozdil_casu.seconds % 60 context['ted'] = datetime.now()
context['dead'] = datetime.combine(cas_deadline, datetime.max.time()) except:
context['ted'] = datetime.now() context['dead'] = None
except: else:
context['dead'] = None context['dead'] = None
return context return context

Loading…
Cancel
Save