Added media viewing and editing; gets media from config and creates a /thumbnail/ folder there
svn: r19869
This commit is contained in:
parent
9841fb79ef
commit
daa01defab
@ -31,6 +31,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td class="ColumnAttribute">{{mediaform.desc.label}}:</td>
|
<td class="ColumnAttribute">{{mediaform.desc.label}}:</td>
|
||||||
<td class="ColumnValue" id="data" colspan="3">{% render mediaform.desc user action %}</td>
|
<td class="ColumnValue" id="data" colspan="3">{% render mediaform.desc user action %}</td>
|
||||||
|
<td rowspan="5">{% media_link media.handle user action %}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="ColumnAttribute">{{mediaform.gramps_id.label}}:</td>
|
<td class="ColumnAttribute">{{mediaform.gramps_id.label}}:</td>
|
||||||
|
@ -23,11 +23,17 @@
|
|||||||
|
|
||||||
# forms.py forms for Django web project
|
# forms.py forms for Django web project
|
||||||
|
|
||||||
|
# Django Modules:
|
||||||
from django import forms
|
from django import forms
|
||||||
from webapp.grampsdb.models import *
|
|
||||||
from django.forms.models import inlineformset_factory
|
from django.forms.models import inlineformset_factory
|
||||||
from django.forms.models import BaseModelFormSet
|
from django.forms.models import BaseModelFormSet
|
||||||
from django.forms.widgets import TextInput
|
from django.forms.widgets import TextInput
|
||||||
|
|
||||||
|
# Gramps Modules:
|
||||||
|
from webapp.grampsdb.models import *
|
||||||
|
import gen.mime
|
||||||
|
|
||||||
|
# Python Modules:
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
class PersonForm(forms.ModelForm):
|
class PersonForm(forms.ModelForm):
|
||||||
@ -197,6 +203,7 @@ class MediaForm(forms.ModelForm):
|
|||||||
from webapp.libdjango import DjangoInterface
|
from webapp.libdjango import DjangoInterface
|
||||||
dji = DjangoInterface()
|
dji = DjangoInterface()
|
||||||
model = super(MediaForm, self).save(commit=False)
|
model = super(MediaForm, self).save(commit=False)
|
||||||
|
model.mime = gen.mime.get_type(model.path)
|
||||||
dobj = dp(self.cleaned_data['text'])
|
dobj = dp(self.cleaned_data['text'])
|
||||||
dji.add_date(model, dobj.serialize())
|
dji.add_date(model, dobj.serialize())
|
||||||
if commit:
|
if commit:
|
||||||
|
@ -26,10 +26,16 @@ from webapp.utils import _, boolean, update_last_changed
|
|||||||
from webapp.grampsdb.models import Media
|
from webapp.grampsdb.models import Media
|
||||||
from webapp.grampsdb.forms import *
|
from webapp.grampsdb.forms import *
|
||||||
from webapp.libdjango import DjangoInterface
|
from webapp.libdjango import DjangoInterface
|
||||||
|
from gen.config import config
|
||||||
|
|
||||||
## Django Modules
|
## Django Modules
|
||||||
from django.shortcuts import get_object_or_404, render_to_response, redirect
|
from django.shortcuts import get_object_or_404, render_to_response, redirect
|
||||||
from django.template import Context, RequestContext
|
from django.template import Context, RequestContext
|
||||||
|
from django.http import HttpResponse
|
||||||
|
|
||||||
|
## Other Python Modules
|
||||||
|
from PIL import Image
|
||||||
|
import os
|
||||||
|
|
||||||
## Globals
|
## Globals
|
||||||
dji = DjangoInterface()
|
dji = DjangoInterface()
|
||||||
@ -49,7 +55,30 @@ def process_media(request, context, handle, action, add_to=None): # view, edit,
|
|||||||
action = request.POST.get("action")
|
action = request.POST.get("action")
|
||||||
|
|
||||||
# Handle: edit, view, add, create, save, delete
|
# Handle: edit, view, add, create, save, delete
|
||||||
if action == "add":
|
if action == "full":
|
||||||
|
# FIXME: path should come from config
|
||||||
|
media = Media.objects.get(handle=handle)
|
||||||
|
media_type, media_ext = media.mime.split("/", 1)
|
||||||
|
folder = config.get('behavior.addmedia-image-dir')
|
||||||
|
image = Image.open("%s/%s" % (folder, media.path))
|
||||||
|
response = HttpResponse(mimetype=media.mime)
|
||||||
|
image.save(response, media_ext.upper())
|
||||||
|
return response
|
||||||
|
elif action == "thumbnail":
|
||||||
|
media = Media.objects.get(handle=handle)
|
||||||
|
media_type, media_ext = media.mime.split("/", 1)
|
||||||
|
folder = config.get('behavior.addmedia-image-dir')
|
||||||
|
if os.path.exists("%s/thumbnail/%s" % (folder, media.path)):
|
||||||
|
image = Image.open("%s/thumbnail/%s" % (folder, media.path))
|
||||||
|
else:
|
||||||
|
image = Image.open("%s/%s" % (folder, media.path))
|
||||||
|
image.thumbnail((300,300), Image.ANTIALIAS)
|
||||||
|
os.makedirs("%s/thumbnail" % folder)
|
||||||
|
image.save("%s/thumbnail/%s" % (folder, media.path))
|
||||||
|
response = HttpResponse(mimetype=media.mime)
|
||||||
|
image.save(response, media_ext.upper())
|
||||||
|
return response
|
||||||
|
elif action == "add":
|
||||||
media = Media(gramps_id=dji.get_next_id(Media, "M"))
|
media = Media(gramps_id=dji.get_next_id(Media, "M"))
|
||||||
mediaform = MediaForm(instance=media)
|
mediaform = MediaForm(instance=media)
|
||||||
mediaform.model = media
|
mediaform.model = media
|
||||||
|
@ -76,6 +76,7 @@ util_filters = [
|
|||||||
|
|
||||||
util_tags = [
|
util_tags = [
|
||||||
'render',
|
'render',
|
||||||
|
'media_link',
|
||||||
'render_name',
|
'render_name',
|
||||||
"get_person_from_handle",
|
"get_person_from_handle",
|
||||||
"event_table",
|
"event_table",
|
||||||
@ -884,6 +885,12 @@ def display_date(obj):
|
|||||||
else:
|
else:
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
def media_link(handle, user, action):
|
||||||
|
retval = """<a href="%s"><img src="%s" /></a>""" % (
|
||||||
|
"/media/%s/full" % handle,
|
||||||
|
"/media/%s/thumbnail" % handle)
|
||||||
|
return retval
|
||||||
|
|
||||||
def render(formfield, user, action, id=None, url=None, *args):
|
def render(formfield, user, action, id=None, url=None, *args):
|
||||||
if not user.is_authenticated():
|
if not user.is_authenticated():
|
||||||
action = "view"
|
action = "view"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user