Browse Source

Pridano administracni rozhrani.

Korekturovana PDF se uz daji pridavat pres admina.
Pridan jednoduchy vypis korekturovanych veci.
remotes/origin/opraf
parent
commit
b0f9714329
  1. 13
      korektury/admin.py
  2. 27
      korektury/migrations/0003_auto_20151204_1855.py
  3. 26
      korektury/migrations/0004_auto_20151204_2240.py
  4. 32
      korektury/migrations/0005_auto_20151204_2244.py
  5. 20
      korektury/migrations/0006_oprava_pdf.py
  6. 45
      korektury/models.py
  7. 19
      korektury/templates/korektury/opraf.html
  8. 13
      korektury/templates/korektury/seznam.html
  9. 3
      korektury/urls.py
  10. 17
      korektury/views.py
  11. 2
      mamweb/settings_common.py
  12. 7
      mamweb/settings_local.py

13
korektury/admin.py

@ -1,3 +1,16 @@
from django.contrib import admin
from reversion.admin import VersionAdmin
from korektury.models import KorekturovanePDF
# Register your models here.
class KorekturovanePDFAdmin(VersionAdmin):
readonly_fields = ['cas', 'stran']
fieldsets = [
(None, {'fields': ['pdf', 'cas', 'stran', 'nazev', 'komentar']}),
# (u'PDF', {'fields': ['pdf']}),
]
list_display = ['pdf', 'cas', 'stran']
list_filter = []
search_fields = []
admin.site.register(KorekturovanePDF, KorekturovanePDFAdmin)

27
korektury/migrations/0003_auto_20151204_1855.py

@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('korektury', '0002_auto_20151202_2351'),
]
operations = [
migrations.AddField(
model_name='korekturovanepdf',
name='cas',
field=models.DateTimeField(default=django.utils.timezone.now, help_text=b'\xc4\x8cas vlo\xc5\xbeen\xc3\xad PDF', verbose_name='\u010das vlo\u017een\xed PDF'),
preserve_default=True,
),
migrations.AddField(
model_name='korekturovanepdf',
name='stran',
field=models.IntegerField(default=0, help_text=b'Po\xc4\x8det stran PDF', verbose_name='po\u010det stran'),
preserve_default=True,
),
]

26
korektury/migrations/0004_auto_20151204_2240.py

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('korektury', '0003_auto_20151204_1855'),
]
operations = [
migrations.AddField(
model_name='korekturovanepdf',
name='komentar',
field=models.TextField(help_text=b'Koment\xc3\xa1\xc5\x99 ke korekturovan\xc3\xa9mu PDF (nap\xc5\x99. na co se zam\xc4\x9b\xc5\x99it)', verbose_name='koment\xe1\u0159 k PDF', blank=True),
preserve_default=True,
),
migrations.AddField(
model_name='korekturovanepdf',
name='nazev',
field=models.TextField(help_text=b'N\xc3\xa1zev (nap\xc5\x99. 22.1 verze 4) korekturovan\xc3\xa9ho PDF', verbose_name='n\xe1zev PDF', blank=True),
preserve_default=True,
),
]

32
korektury/migrations/0005_auto_20151204_2244.py

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('korektury', '0004_auto_20151204_2240'),
]
operations = [
migrations.AlterField(
model_name='komentar',
name='autor',
field=models.CharField(help_text=b'Autor koment\xc3\xa1\xc5\x99e', max_length=20, verbose_name='autor koment\xe1\u0159e', blank=True),
preserve_default=True,
),
migrations.AlterField(
model_name='korekturovanepdf',
name='nazev',
field=models.CharField(help_text=b'N\xc3\xa1zev (nap\xc5\x99. 22.1 verze 4) korekturovan\xc3\xa9ho PDF', max_length=50, verbose_name='n\xe1zev PDF', blank=True),
preserve_default=True,
),
migrations.AlterField(
model_name='oprava',
name='autor',
field=models.CharField(help_text=b'Autor opravy', max_length=20, verbose_name='autor opravy', blank=True),
preserve_default=True,
),
]

20
korektury/migrations/0006_oprava_pdf.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('korektury', '0005_auto_20151204_2244'),
]
operations = [
migrations.AddField(
model_name='oprava',
name='pdf',
field=models.ForeignKey(default=-1, to='korektury.KorekturovanePDF'),
preserve_default=True,
),
]

45
korektury/models.py

@ -13,8 +13,8 @@ from django.core.cache import cache
from imagekit.models import ImageSpecField, ProcessedImageField
from imagekit.processors import ResizeToFit, Transpose
from PIL import Image
import os
import subprocess
from cStringIO import StringIO
from django.core.files.base import ContentFile
@ -26,12 +26,11 @@ import reversion
# PrilohaReseni method
def generate_filename(self, filename):
clean = filename.replace('/','-').replace('\0', '')
datedir = timezone.now().strftime('%Y-%m')
clean = filename.replace('/','-').replace('\0', '').replace(":","_")
fname = "%s_%s" % (
timezone.now().strftime('%Y-%m-%d-%H:%M'),
timezone.now().strftime('%Y-%m-%d-%H_%M'),
clean)
return os.path.join(settings.SEMINAR_RESENI_DIR, datedir, fname)
return os.path.join(settings.KOREKTURY_PDF_DIR, fname)
#@reversion.register(ignore_duplicate_revision=True)
@ -45,10 +44,40 @@ class KorekturovanePDF(models.Model):
#Interní ID
id = models.AutoField(primary_key = True)
cas = models.DateTimeField(u'čas vložení PDF',default=timezone.now,help_text = 'Čas vložení PDF')
nazev = models.CharField(u'název PDF',blank = True,max_length=50, help_text='Název (např. 22.1 verze 4) korekturovaného PDF')
komentar = models.TextField(u'komentář k PDF',blank = True, help_text='Komentář ke korekturovanému PDF (např. na co se zaměřit)')
pdf = models.FileField(u'pdf', upload_to = generate_filename)
stran = models.IntegerField(u'počet stran', help_text = 'Počet stran PDF', default = 0)
#TODO Nepovinný foreign key k číslu
def save(self):
super(KorekturovanePDF, self).save()
print("\nSaving")
print(self.pdf.path)
print(self.pdf.url)
filename = os.path.split(self.pdf.file.name)[1].split(".")[0]
try:
os.listdir(settings.KOREKTURY_IMG_DIR)
except OSError:
os.mkdir(settings.KOREKTURY_IMG_DIR)
while True:
res = subprocess.call([
"convert",
"-density","180x180",
"-geometry"," 1024x1448",
self.pdf.path+"[%d]"%self.stran,
os.path.join(settings.KOREKTURY_IMG_DIR, "%s-%d.png"%(filename,self.stran))])
if res==1:
break
self.stran +=1
super(KorekturovanePDF, self).save()
@reversion.register(ignore_duplicate_revision=True)
@ -63,7 +92,7 @@ class Oprava(models.Model):
#Interní ID
id = models.AutoField(primary_key = True)
#pdf = models.ForeignKey(KorekturovanePDF)
pdf = models.ForeignKey(KorekturovanePDF, default=-1)
strana = models.IntegerField(u'strana s opravou', help_text='Strana s opravou (od 0)')
@ -83,7 +112,7 @@ class Oprava(models.Model):
# TODO: Změnit na cizí klíč do orgů
autor = models.TextField(u'autor opravy',blank = True, help_text='Autor opravy')
autor = models.CharField(u'autor opravy',blank = True,max_length=20, help_text='Autor opravy')
text = models.TextField(u'text opravy',blank = True, help_text='Text opravy')
@ -112,7 +141,7 @@ class Komentar(models.Model):
oprava = models.ForeignKey(Oprava)
# TODO: Změnit na cizí klíč do orgů
autor = models.TextField(u'autor komentáře',blank = True, help_text='Autor komentáře')
autor = models.CharField(u'autor komentáře',blank = True,max_length=20, help_text='Autor komentáře')
text = models.TextField(u'text komentáře',blank = True, help_text='Text komentáře')

19
korektury/templates/korektury/opraf.html

@ -3,13 +3,12 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" media="screen, projection" href="/static/korektury/opraf.css" />
<script src="/static/korektury/opraf.js"></script>
<title>Korektury 22_3_verze5.pdf</title>
<title>Korektury {{pdf.nazev}}</title>
</head>
<body>
<h1>Korektury 22_3_verze5.pdf</h1>
<i>Klikni na chybu, napi¹ komentáø</i> |
<a href="?action=ls">ls</a> |
<h1>Korektury {{pdf.nazev}}</h1>
<i>Klikni na chybu, napiš komentář</i> |
<a href="/korektury">ls</a> |
<a href="?action=doc">help</a> |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
<a href="https://mam.mff.cuni.cz/">hlavní stránka</a> |
<a href="https://mam.mff.cuni.cz/wiki">wiki</a> |
@ -24,7 +23,7 @@
<br/>
<textarea onkeypress="textarea_onkey(event);" id="commform-text" cols=40 rows=10 name="txt"></textarea>
<br/>
<input type="hidden" size="3" name="pdf" value='22_3_verze5.pdf'/>
<input type="hidden" size="3" name="pdf" value='{{pdf.id}}'/>
<input type="hidden" size="3" id="commform-x" name="x"/>
<input type="hidden" size="3" id="commform-y" name="y"/>
<input type="hidden" size="3" id="commform-img-id" name="img-id"/>
@ -35,13 +34,13 @@
</div>
{% for i in img_indexes %}
<div class='imgdiv'><img width='1021' height='1448' onclick='img_click(this,event)' id='img-{{i}}' src='/static/korektury/png/{{img_name}}-{{i}}.png'/></div><hr/>
<div class='imgdiv'><img width='1021' height='1448' onclick='img_click(this,event)' id='img-{{i}}' src='/media/korektury/img/{{img_name}}-{{i}}.png'/></div><hr/>
{% endfor %}
<form method="post">
<input type='hidden' name='action' value='delall'/>
<input type='submit' value='Smazat v¹echny komentáøe'/>
<input type='hidden' name='pdf' value='22_3_verze5.pdf'/>
<input type='hidden' name='pdf' value='{{pdf.id}}'/>
<input type='checkbox' name='yes'/> Souhlasím se smazáním v¹ech kometáøù
</form>
<hr/>
@ -66,7 +65,7 @@
<div class='float-right'>
<form action='' onsubmit='save_scroll(this)' method='POST'>
{% csrf_token %}
<input type='hidden' name='pdf' value='22_3_verze5.pdf'>
<input type='hidden' name='pdf' value='{{pdf.id}}'>
<input type='hidden' name='id' value='{{o.id}}'>
<input type='hidden' name='scroll'>
{% if o.komentare %}
@ -122,7 +121,7 @@
<div class="float-right">
<form action='' onsubmit='save_scroll(this)' method='POST'>
{% csrf_token %}
<input type='hidden' name='pdf' value='22_3_verze1.pdf'>
<input type='hidden' name='pdf' value='{{pdf.id}}'>
<input type='hidden' name='id' value='{{k.id}}'>
<input type='hidden' name='scroll'>
<button type='submit' name='action' value='del-comment' title='Smaž komentář'

13
korektury/templates/korektury/seznam.html

@ -0,0 +1,13 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Seznam korektur</title>
</head>
<body>
<ul>
{% for pdf in object_list %}
<li> <b>{{ pdf.nazev }}</b> <i>{{pdf.komentar}}</i> <a href="/korektury/{{pdf.id}}">{{pdf.pdf.url}}</a> </li>
{% endfor %}
</ul>
</body>
<html>

3
korektury/urls.py

@ -3,5 +3,6 @@ from django.conf.urls import patterns, url
from . import views
urlpatterns = patterns('',
url(r'^korektury$',views.KorekturyView.as_view(),name='korektury'),
url(r'^korektury$',views.KorekturyListView.as_view(),name='korektury-list'),
url(r'^korektury/(?P<pdf>\d+)$', views.KorekturyView.as_view(), name='korektury'),
)

17
korektury/views.py

@ -9,7 +9,7 @@ from django.utils.translation import ugettext as _
from django.http import Http404
from django.http import HttpResponseRedirect
from .models import Oprava,Komentar
from .models import Oprava,Komentar,KorekturovanePDF
from .forms import OpravaForm
from datetime import timedelta, date, datetime
@ -21,6 +21,11 @@ import os
from django.conf import settings
import unicodedata
class KorekturyListView(generic.ListView):
model = KorekturovanePDF
template_name = 'korektury/seznam.html'
### Korektury
class KorekturyView(generic.TemplateView):
model = Oprava
@ -40,8 +45,9 @@ class KorekturyView(generic.TemplateView):
text = q.get('txt')
strana = int(q.get('img-id')[4:])
scroll = q.get('scroll')
pdf = KorekturovanePDF.objects.filter(id=q.get('pdf')).first()
op = Oprava(x=x,y=y, autor=autor, text=text, strana=strana)
op = Oprava(x=x,y=y, autor=autor, text=text, strana=strana,pdf = pdf)
op.save()
elif (action == u'del'):
id = int(q.get('id'))
@ -88,10 +94,13 @@ class KorekturyView(generic.TemplateView):
# len(Oprava.objects.all()),x,y,autor,text,strana))
def get_context_data(self, **kwargs):
context = super(KorekturyView,self).get_context_data(**kwargs)
context['img_name'] = "22_3_verze5"
pdf = KorekturovanePDF.objects.filter(id=self.kwargs['pdf']).first()
context['pdf'] = pdf
context['img_name'] = os.path.split(pdf.pdf.path)[1].split('.')[0]
context['img_path'] = settings.KOREKTURY_IMG_DIR
context['img_indexes'] = range(27)
context['form_oprava'] = OpravaForm()
opravy = Oprava.objects.all()
opravy = Oprava.objects.filter(pdf=self.kwargs['pdf'])
for o in opravy:
o.komentare = o.komentar_set.all()
context['opravy'] = opravy

2
mamweb/settings_common.py

@ -236,6 +236,8 @@ LOGGING = {
# MaM specific
SEMINAR_RESENI_DIR = os.path.join(BASE_DIR, 'media', 'reseni')
KOREKTURY_PDF_DIR = os.path.join(BASE_DIR, 'media', 'korektury','pdf')
KOREKTURY_IMG_DIR = os.path.join(BASE_DIR, 'media', 'korektury','img')
CKEDITOR_CONFIGS = {

7
mamweb/settings_local.py

@ -35,6 +35,13 @@ DATABASES = {
'NAME': os.path.join(BASE_DIR, 'db-local.sqlite3'),
}
}
#DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.postgresql_psycopg2',
# 'NAME': 'mam_local',
# 'USER': 'mam',
# },
#}
# LOGGING

Loading…
Cancel
Save