diff options
| -rw-r--r-- | chimere/admin.py | 2 | ||||
| -rw-r--r-- | chimere/forms.py | 23 | ||||
| -rw-r--r-- | chimere/static/chimere/css/styles.css | 40 | ||||
| -rw-r--r-- | chimere/templates/chimere/edit.html | 28 | ||||
| -rw-r--r-- | chimere/templates/chimere/edit_route.html | 24 | ||||
| -rw-r--r-- | chimere/views.py | 28 | 
6 files changed, 119 insertions, 26 deletions
diff --git a/chimere/admin.py b/chimere/admin.py index 70853d4..bafa754 100644 --- a/chimere/admin.py +++ b/chimere/admin.py @@ -132,7 +132,7 @@ class RouteFileAdmin(admin.ModelAdmin):  class MultimediaTypeAdmin(admin.ModelAdmin):      search_fields = ("name",) -    list_display = ('name', 'media_type', 'mime_type', 'available') +    list_display = ('name', 'media_type', 'mime_type', 'iframe', 'available')      list_filter = ('media_type', 'available')  class MultimediaFileAdmin(admin.ModelAdmin): diff --git a/chimere/forms.py b/chimere/forms.py index e22c9c7..5ae8257 100644 --- a/chimere/forms.py +++ b/chimere/forms.py @@ -23,13 +23,14 @@ Forms  from django import forms  from django.conf import settings  from django.contrib.gis.db import models +from django.forms.formsets import formset_factory  from django.utils.translation import ugettext as _  from django.contrib.auth.models import User, Permission, ContentType  from django.contrib.admin.widgets import AdminDateWidget  from django.core.mail import EmailMessage, BadHeaderError  from chimere.models import Marker, Route, PropertyModel, Property, Area,\ -                                News, Category, SubCategory, RouteFile +     News, Category, SubCategory, RouteFile, MultimediaFile, PictureFile  from chimere.widgets import AreaField, PointField, TextareaWidget, \                              DatePickerWidget @@ -269,6 +270,26 @@ class RouteForm(RouteAdminForm):          new_marker.saveProperties(properties)          return new_route +class MultimediaFileForm(forms.ModelForm): +    """ +    Form for a multimedia file +    """ +    class Meta: +        model = MultimediaFile +        exclude = ('order',) + +MultimediaFileFormSet = formset_factory(MultimediaFileForm, can_delete=True) + +class PictureFileForm(forms.ModelForm): +    """ +    Form for a picture file +    """ +    class Meta: +        model = PictureFile +        exclude = ('order', 'height', 'width') + +PictureFileFormSet = formset_factory(PictureFileForm, can_delete=True) +  class FileForm(forms.Form):      raw_file  = forms.FileField(label=_(u"File")) diff --git a/chimere/static/chimere/css/styles.css b/chimere/static/chimere/css/styles.css index 8239a45..d973e99 100644 --- a/chimere/static/chimere/css/styles.css +++ b/chimere/static/chimere/css/styles.css @@ -3,24 +3,20 @@  a, a:link, a:visited, legend,  #footer .map-footer a, #footer .map-footer a:link,  #footer .map-footer a:visited, .errorlist, -.detail_footer a, -#categories li#display_submited, +.detail_footer a, caption, +#categories li#display_submited, h4,  .simple .cloud h2{      color:#54c200;  } -h2, h3, .action li, .action li a, +h2, h3, th, .action li, .action li a,  .action li li a,  #footer a, #footer a:link, #footer a:visited, .ui-widget-header,  a#welcome_button, a:visited#welcome_button, a:link#welcome_button, -.olControlPermalink a { +.olControlPermalink a{      color:#fff;  } -h4{ -    color:#5e1e68; -} -  .action li.ui-state-active a,  .action li li.ui-state-active a{      color:#333; @@ -28,7 +24,7 @@ h4{  /* backgroundcolor definition */ -body, h2, h3, +body, h2, h3, th,  .ui-widget-header,  .action li.selected,  #welcome_button, @@ -145,9 +141,15 @@ h3{      cursor:move;  } -h4{ +h4, caption{      font-weight:normal;      font-style:italic; +    margin:0; +    text-align:left; +} + +th{ +    padding:0.2em 1em;  }  hr.spacer{ @@ -291,7 +293,7 @@ ul#action-2 {  }  #detail_content img{ -    width:280px; +    max-width:280px;  }  ul#share{ @@ -474,6 +476,22 @@ a#welcome_button{      text-decoration:none;  } +/* forms */ + +table.multimedia td input[type=checkbox]{ +    display:block; +    margin-left:auto; +    margin-right:auto; +} + +table.multimedia td input[type=text]{ +    width:300px; +} + +#live_lonlat p{ +    display:inline-table; +} +  /* openlayer customisation */  .olControlPermalink {      display: block; diff --git a/chimere/templates/chimere/edit.html b/chimere/templates/chimere/edit.html index 0616694..a85d561 100644 --- a/chimere/templates/chimere/edit.html +++ b/chimere/templates/chimere/edit.html @@ -36,11 +36,6 @@          {%if form.point.errors %}<ul class="errorlist"><li>{% trans "Select a location for this new site" %}</li></ul>{%endif%}          {{point_widget}}      </div> -    <div class="fieldWrapper"> -        <label for="id_picture">{% trans "Image" %}</label> -        {{ form.picture.errors }} -        {{ form.picture }} -    </div>      {% if dated %}      <div class="fieldWrapper">          <label for="id_start_date">{% trans "Start date" %}</label> @@ -66,6 +61,29 @@              {%endifequal%}          {%endfor%}      {%endfor%} + +    <table class='multimedia'> +    <caption>{% trans "Multimedia files" %}</caption> +    {% for frm in formset_multi%}{%ifequal forloop.counter 1 %} +    <tr>{% for field in frm%} +        <th>{{field.label}}</th>{%endfor%} +    </tr>{%endifequal%} +    <tr>{% for field in frm%} +        <td>{{field}}</td>{%endfor%} +    </tr>{%endfor%} +    </table> + +    <table class='multimedia'> +    <caption>{% trans "Picture files" %}</caption> +    {% for frm in formset_picture%}{%ifequal forloop.counter 1 %} +    <tr>{% for field in frm%} +        <th>{{field.label}}</th>{%endfor%} +    </tr>{%endifequal%} +    <tr>{% for field in frm%} +        <td>{{field}}</td>{%endfor%} +    </tr>{%endfor%} +    </table> +      <p><input type='submit' onclick='saveExtent();' value="{% trans 'Propose'%}"/></p>      </form>      </fieldset> diff --git a/chimere/templates/chimere/edit_route.html b/chimere/templates/chimere/edit_route.html index c1def64..92510d0 100644 --- a/chimere/templates/chimere/edit_route.html +++ b/chimere/templates/chimere/edit_route.html @@ -63,6 +63,30 @@          {{ field }}      </div>      {%endifequal%}{%endfor%}{%endfor%} + +    <table class='multimedia'> +    <caption>{% trans "Multimedia files" %}</caption> +    {% for frm in formset_multi%}{%ifequal forloop.counter 1 %} +    <tr>{% for field in frm%} +        <th>{{field.label}}</th>{%endfor%} +    </tr>{%endifequal%} +    <tr>{% for field in frm%} +        <td>{{field}}</td>{%endfor%} +    </tr>{%endfor%} +    </table> + +    <table class='multimedia'> +    <caption>{% trans "Picture files" %}</caption> +    <ul class='inline-form'>{{ formset_picture.as_ul }}</ul> +    {% for frm in formset_picture%}{%ifequal forloop.counter 1 %} +    <tr>{% for field in frm%} +        <th>{{field.label}}</th>{%endfor%} +    </tr>{%endifequal%} +    <tr>{% for field in frm%} +        <td>{{field}}</td>{%endfor%} +    </tr>{%endfor%} +    </table> +      <p><input type='submit' onclick='saveExtent();' value="{% trans 'Propose'%}"/></p>      </form>      </fieldset> diff --git a/chimere/views.py b/chimere/views.py index 0f662ba..c76f5b8 100644 --- a/chimere/views.py +++ b/chimere/views.py @@ -28,7 +28,6 @@ from django.conf import settings  from django.core import serializers  from django.core.urlresolvers import reverse  from django.db.models import Q -from django.forms import model_to_dict  from django.http import HttpResponseRedirect, HttpResponse  from django.shortcuts import redirect, render_to_response  from django.template import loader, RequestContext @@ -42,8 +41,9 @@ from chimere.models import Category, SubCategory, PropertyModel, \  from chimere.widgets import getMapJS, PointChooserWidget, \                              RouteChooserWidget -from chimere.forms import MarkerForm, RouteForm, ContactForm, \ -                        FileForm, FullFileForm, notifySubmission, notifyStaff +from chimere.forms import MarkerForm, RouteForm, ContactForm, FileForm, \ +     FullFileForm, MultimediaFileFormSet, PictureFileFormSet, notifySubmission,\ +     notifyStaff  #TODO: convert to requestcontext  def get_base_response(area_name=""): @@ -117,12 +117,14 @@ def get_edit_page(redirect_url, item_cls, item_form):                         None              ref_item = init_item              modified_item = item_cls.objects.filter(ref_item=init_item, -                                submiter_session_key=request.session.session_key) +                               submiter_session_key=request.session.session_key)              if modified_item.count():                  init_item = modified_item.all()[0]          # If the form has been submited          if request.method == 'POST': +            formset_multi = MultimediaFileFormSet() +            formset_picture = PictureFileFormSet()              inst = None              # allow to directly modify only if owner or superuser              if init_item and (request.user.is_superuser or \ @@ -158,7 +160,12 @@ def get_edit_page(redirect_url, item_cls, item_form):                         None          else:              form = item_form(instance=init_item) -        return None, (item_id, init_item, response_dct, form) +            init_multi = init_item.get_init_multi() if init_item else None +            formset_multi = MultimediaFileFormSet(initial=init_multi) +            init_picture = init_item.get_init_picture() if init_item else None +            formset_picture = PictureFileFormSet(initial=init_picture) +        return None, (item_id, init_item, response_dct, form, formset_multi, +                      formset_picture)      return func  get_edit_marker = get_edit_page('chimere:edit', Marker, MarkerForm) @@ -170,8 +177,8 @@ def edit(request, area_name="", item_id=None, submited=False):      response, values = get_edit_marker(request, area_name, item_id)      if response:          return response -    print '1' -    item_id, init_item, response_dct, form = values +    item_id, init_item, response_dct, form, formset_multi, formset_picture = \ +                                                                        values      # get the "manualy" declared_fields. Ie: properties      declared_fields = form.declared_fields.keys() @@ -181,6 +188,8 @@ def edit(request, area_name="", item_id=None, submited=False):          'error_message':'',          'map_layer':settings.CHIMERE_MAP_LAYER,          'form':form, +        'formset_multi':formset_multi, +        'formset_picture':formset_picture,          'dated':settings.CHIMERE_DAYS_BEFORE_EVENT,          'extra_head':form.media,          'marker_id':item_id, @@ -269,7 +278,8 @@ def editRoute(request, area_name="", item_id=None, submited=False):      response, values = get_edit_route(request, area_name, item_id)      if response:          return response -    item_id, init_item, response_dct, form = values +    item_id, init_item, response_dct, form, formset_multi, formset_picture = \ +                                                                        values      # get the "manualy" declared_fields. Ie: properties      declared_fields = form.declared_fields.keys() @@ -279,6 +289,8 @@ def editRoute(request, area_name="", item_id=None, submited=False):          'error_message':'',          'map_layer':settings.CHIMERE_MAP_LAYER,          'form':form, +        'formset_multi':formset_multi, +        'formset_picture':formset_picture,          'dated':settings.CHIMERE_DAYS_BEFORE_EVENT,          'extra_head':form.media,          'sub_categories':SubCategory.getAvailable(['R', 'B'],  | 
