diff --git a/expo/admin.py b/expo/admin.py index 24f6f2e..a1d4fe0 100644 --- a/expo/admin.py +++ b/expo/admin.py @@ -1,5 +1,7 @@ from troggle.expo.models import * from django.contrib import admin +from django.forms import ModelForm +import django.forms as forms #from troggle.reversion.admin import VersionAdmin #django-reversion version control class RoleInline(admin.TabularInline): @@ -16,9 +18,14 @@ class ScannedImageInline(admin.TabularInline): class SurveyAdmin(admin.ModelAdmin): inlines = (ScannedImageInline,) +class QMInline(admin.TabularInline): + model=QM + extra = 4 + #class LogbookEntryAdmin(VersionAdmin): class LogbookEntryAdmin(admin.ModelAdmin): search_fields = ('title','expedition__year') + #inlines = (QMInline,) #doesn't work because QM has two foreignkeys to Logbookentry- need workaround class PersonExpeditionInline(admin.TabularInline): model = PersonExpedition @@ -29,15 +36,17 @@ class PersonAdmin(admin.ModelAdmin): inlines = (PersonExpeditionInline,) class QMAdmin(admin.ModelAdmin): + search_fields = ('found_by__cave__kataster_number','number') def save_model(self, request, obj, form, change): obj.new_since_parsing=True obj.save() - + class PersonExpeditionAdmin(admin.ModelAdmin): search_fields = ('person__first_name','expedition__year') class CaveAdmin(admin.ModelAdmin): search_fields = ('official_name','kataster_number','unofficial_number') + #inlines = (QMInline,) extra = 4 @@ -57,7 +66,7 @@ admin.site.register(PersonExpedition,PersonExpeditionAdmin) admin.site.register(Role) admin.site.register(LogbookEntry, LogbookEntryAdmin) admin.site.register(PersonTrip) -admin.site.register(QM) +admin.site.register(QM, QMAdmin) admin.site.register(Survey, SurveyAdmin) admin.site.register(ScannedImage) diff --git a/expo/forms.py b/expo/forms.py index 91f39f0..882115f 100644 --- a/expo/forms.py +++ b/expo/forms.py @@ -7,4 +7,4 @@ class CaveForm(ModelForm): class PersonForm(ModelForm): class Meta: - model = Person \ No newline at end of file + model = Person diff --git a/expo/models.py b/expo/models.py index 592b2e8..56fbf01 100644 --- a/expo/models.py +++ b/expo/models.py @@ -19,7 +19,7 @@ class TroggleModel(models.Model): new_since_parsing = models.BooleanField(default=False, editable=False) def get_admin_url(self): - return settings.URL_ROOT + "/admin/expo/" + self._meta.object_name + "/" + str(self.pk) + return settings.URL_ROOT + "/admin/expo/" + self._meta.object_name.lower() + "/" + str(self.pk) class Meta: abstract = True @@ -214,8 +214,8 @@ class LogbookEntry(TroggleModel): #href = models.CharField(max_length=100) - logbookentry_next = models.ForeignKey('LogbookEntry', related_name='pnext', blank=True,null=True) - logbookentry_prev = models.ForeignKey('LogbookEntry', related_name='pprev', blank=True,null=True) + #logbookentry_next = models.ForeignKey('LogbookEntry', related_name='pnext', blank=True,null=True) + #logbookentry_prev = models.ForeignKey('LogbookEntry', related_name='pprev', blank=True,null=True) class Meta: verbose_name_plural = "Logbook Entries" diff --git a/expo/templatetags/wiki_markup.py b/expo/templatetags/wiki_markup.py index 9e68fef..30c9a08 100644 --- a/expo/templatetags/wiki_markup.py +++ b/expo/templatetags/wiki_markup.py @@ -2,7 +2,8 @@ from django import template from django.utils.html import conditional_escape from django.template.defaultfilters import stringfilter from django.utils.safestring import mark_safe -import troggle.settings as settings +from django.conf import settings +from expo.models import QM import re register = template.Library() @@ -55,7 +56,35 @@ def wiki_to_html_short(value, autoescape=None): value = re.sub("'''([^']+)'''", r"<b>\1</b>", value, re.DOTALL) value = re.sub("''([^']+)''", r"<i>\1</i>", value, re.DOTALL) #make cave links - value = re.sub("\[\[\s*cave:([^\s]+)\s*\s*\]\]", r'<a href="%s/troggle/cave/\1/">\1</a>' % settings.URL_ROOT, value, re.DOTALL) + value = re.sub("\[\[\s*cave:([^\s]+)\s*\s*\]\]", r'<a href="%s/cave/\1/">\1</a>' % settings.URL_ROOT, value, re.DOTALL) + + + #function for replacing wikicode qm links with html qm links + def qmrepl(matchobj): + if len(matchobj.groups())==4: + grade=matchobj.groups()[3] + else: + grade='' + qmdict={'urlroot':settings.URL_ROOT,'cave':matchobj.groups()[0],'year':matchobj.groups()[1],'number':matchobj.groups()[2],'grade':grade} + try: + qm=QM.objects.get(found_by__cave__kataster_number=qmdict['cave'],found_by__date__year=qmdict['year'], number=qmdict['number']) + url=r'<a href=' + str(qm.get_absolute_url()) +'>' + str(qm) + '</a>' + except QM.DoesNotExist: + url = r'<a class="redtext" href="%(urlroot)s/cave/%(cave)s/%(year)s-%(number)s%(grade)s">%(cave)s:%(year)s-%(number)s%(grade)s</a>' % qmdict + return url + + #make qm links + value = re.sub("\[\[\s*cave:([^\s]+)\s*\s*\QM:(\d*)-(\d*)([ABCDX]?)\]\]",qmrepl, value, re.DOTALL) + + #qms=qmfinder.search(value) + #for qm in qms: + #if QM.objects.filter(cave__kataster_number=qm[0], found_by__year=qm[1], number=qm[2]).count >= 1: # If there is at lesat one QM matching this query + #replace qm with link in red + #else + #replace qm with link in blue + + #turn qm links red if nonexistant + #Make lists from lines starting with lists of [stars and hashes] outValue = "" listdepth = [] diff --git a/expo/views_caves.py b/expo/views_caves.py index 169dbec..68dd3d0 100644 --- a/expo/views_caves.py +++ b/expo/views_caves.py @@ -1,9 +1,12 @@ -from troggle.expo.models import Cave, CaveAndEntrance, Survey, Expedition +from troggle.expo.models import Cave, CaveAndEntrance, Survey, Expedition, QM import troggle.expo.models as models import troggle.settings as settings -from troggle.expo.forms import CaveForm +from django.forms.models import formset_factory import search +from django.core.urlresolvers import reverse from troggle.alwaysUseRequestContext import render_response # see views_logbooks for explanation on this. +from django.http import HttpResponseRedirect +from django.conf import settings def getCave(cave_id): """Returns a cave object when given a cave name or number. It is used by views including cavehref, ent, and qm.""" @@ -21,11 +24,19 @@ def caveindex(request): def cavehref(request, cave_id='', offical_name=''): return render_response(request,'cave.html', {'cave': getCave(cave_id),}) - -def qm(request,cave_id,qm_id,year): + +def qm(request,cave_id,qm_id,year,grade=None): year=int(year) - qm=getCave(cave_id).get_QMs().get(number=qm_id,found_by__date__year=year) - return render_response(request,'qm.html',{'qm':qm,}) + try: + qm=getCave(cave_id).get_QMs().get(number=qm_id,found_by__date__year=year) + return render_response(request,'qm.html',locals()) + + except QM.DoesNotExist: + url= settings.URL_ROOT + r'/admin/expo/qm/add/?'+ r'number=' + qm_id + if grade: + url += r'&grade=' + grade + return HttpResponseRedirect(url) + def ent(request, cave_id, ent_letter): cave = Cave.objects.filter(kataster_number = cave_id)[0] diff --git a/expo/views_logbooks.py b/expo/views_logbooks.py index fae7491..cfc5d2f 100644 --- a/expo/views_logbooks.py +++ b/expo/views_logbooks.py @@ -71,7 +71,18 @@ def personexpedition(request, first_name='', last_name='', year=''): def logbookentry(request, logbookentry_pk): logbookentry = LogbookEntry.objects.get(pk = logbookentry_pk) - return render_response(request, 'logbookentry.html', {'logbookentry': logbookentry, }) + logsforcave=logbookentry.cave.logbookentry_set.all() + biggestQMnumber=0 + for log in logsforcave: + try: + biggestQMnumberInLog = logbookentry.QMs_found.order_by('-number')[0].number + except IndexError: + biggestQMnumberInLog = 0 + if biggestQMnumberInLog > biggestQMnumber: + biggestQMnumber = biggestQMnumberInLog + nextQMnumber=biggestQMnumber+1 + newQMlink=settings.URL_ROOT + r'/admin/expo/qm/add/?' + r'found_by=' + str(logbookentry.pk) +'&number=' + str(nextQMnumber) + return render_response(request, 'logbookentry.html', {'logbookentry': logbookentry, 'newQMlink':newQMlink}) def logbookSearch(request, extra): query_string = '' diff --git a/expo/views_other.py b/expo/views_other.py index 9852ccc..f83c6e2 100644 --- a/expo/views_other.py +++ b/expo/views_other.py @@ -6,10 +6,14 @@ from troggle.parsers.people import LoadPersonsExpos import re from troggle.parsers.survex import LoadAllSurvexBlocks import randSent +from django.http import HttpResponse from django.core.urlresolvers import reverse from troggle.alwaysUseRequestContext import render_response # see views_logbooks for explanation on this. +def showrequest(request): + return HttpResponse(request.GET) + def stats(request): statsDict={} statsDict['expoCount'] = int(Expedition.objects.count()) diff --git a/media/css/main3.css b/media/css/main3.css index 752d813..8cdcdcc 100644 --- a/media/css/main3.css +++ b/media/css/main3.css @@ -55,7 +55,7 @@ div#content div#footer { clear:both; - background-color:black; + background-color:#999; color:white; text-align:center; margin-left:auto; @@ -294,6 +294,17 @@ td { } +.redtext{ + color:#F00; + } + +a.redtext:link { + color:#F00; + +} + +.redtext + .menuBarItem { font-variant: small-caps; text-align: right; diff --git a/parsers/QMs.py b/parsers/QMs.py index bad95a7..c7e6789 100644 --- a/parsers/QMs.py +++ b/parsers/QMs.py @@ -33,9 +33,9 @@ def parseCaveQMs(cave,pathToCSV): year=int(line[0][1:5]) #check if placeholder exists for given year, create it if not if cave=='stein': - placeholder, hadToCreate = LogbookEntry.objects.get_or_create(date__year=year, text="placeholder for QMs in 204", defaults={"date": date(year, 1, 1),"cave":steinBr}) + placeholder, hadToCreate = LogbookEntry.objects.get_or_create(date__year=year, title="placeholder for QMs in 204", text="QMs temporarily attached to this should be re-attached to their actual trips", defaults={"date": date(year, 1, 1),"cave":steinBr}) elif cave=='hauch': - placeholder, hadToCreate = LogbookEntry.objects.get_or_create(date__year=year, text="placeholder for QMs in 234", defaults={"date": date(year, 1, 1),"cave":hauchHl}) + placeholder, hadToCreate = LogbookEntry.objects.get_or_create(date__year=year, title="placeholder for QMs in 234", text="QMs temporarily attached to this should be re-attached to their actual trips", defaults={"date": date(year, 1, 1),"cave":hauchHl}) if hadToCreate: print cave+" placeholder logbook entry for " + str(year) + " added to database" QMnum=re.match(r".*?-\d*?-X?(?P<numb>\d*)",line[0]).group("numb") diff --git a/templates/base.html b/templates/base.html index 8c79f87..bf31676 100644 --- a/templates/base.html +++ b/templates/base.html @@ -3,16 +3,12 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <link rel="stylesheet" type="text/css" href="{{ settings.MEDIA_URL }}css/main3.css" /> - <title>{% block title %}THE TITLE{% endblock %}</title> - <script src="{{ settings.MEDIA_URL }}js/base.js" type="text/javascript"></script> {% block head %}{% endblock %} </head> - <body> - -<div> +<div class="wrapper"> <div id="expoHeader"> <img id="frontPageBanner" src="{{ settings.MEDIA_URL }}loserBanner.jpg"/> <div id="expoHeaderText"> <h1>CUCC Expeditions to Austria: 1976 - </h1> @@ -22,46 +18,28 @@ </div> </div> <hr/> - <div id="editLink"> - {% block loginInfo %} - {% if user.username %} - You are logged in as {{ user.username }}. - | <a href="{{ settings.URL_ROOT }}/accounts/logout">Log out</a> - {% else %} - <a href="{{ settings.URL_ROOT }}/accounts/register">Sign up</a> - | <a href="{{ settings.URL_ROOT }}/accounts/login">Log in</a> - {% endif %} + <div id="editLink"> {% block loginInfo %} + {% if user.username %} + You are logged in as {{ user.username }}. + | <a href="{{ settings.URL_ROOT }}/accounts/logout/">Log out</a> {% else %} <a href="{{ settings.URL_ROOT }}/accounts/register">Sign up</a> | <a href="{{ settings.URL_ROOT }}/accounts/login/">Log in</a> {% endif %} {% endblock%} | <a href="{{ settings.URL_ROOT }}">Home </a> | - {% block editLink %} - - {% endblock %} - </div> -</div> - - - + {% block editLink %} + + {% endblock %} </div> {% block nav %} <!-- Use id="nav" for the left side menu --> - {% endblock %} - - - -<div id="content" > -{% block contentheader %} -{% endblock %} -{% block content %} + {% endblock %} + <div id="content" > {% block contentheader %} + {% endblock %} + {% block content %} REPLACE : The content -{% endblock %} -<br class="clearfloat" /> <!--This is to ensure that the content div expands around floated objects*/--> + {% endblock %} <br class="clearfloat" /> + <!--This is to ensure that the content div expands around floated objects*/--> + </div> </div> - - -<div id="footer"> -{% block footer %} - THE FOOTER -{% endblock %} +<div class="push"></div> </div> +<div id="footer"> {% block footer %} <a href="http://cucc.survex.com"> CUCC website</a>| <a href="http://cucc.survex.com/expo"> Expedition website </a>| <a href="{% url frontpage %}"> Troggle front page </a>| <a href="{% url caveindex %}"> All caves </a>| <a href="{% url personindex %}"> All cavers </a>| <a href="{% url caveindex %}"> Virtual survey binder </a>| <a href="{% url survey %}"> Expedition statistics </a>| <a href="{% url calendar 2007 %}"> Expedition calendar </a> {% endblock %} </div> </body> </html> - diff --git a/templates/logbookentry.html b/templates/logbookentry.html index 5b972e8..812197a 100644 --- a/templates/logbookentry.html +++ b/templates/logbookentry.html @@ -56,6 +56,7 @@ </tr> {% endfor %} </table> +<a href="{{newQMlink}}">Add QM found on this trip</a> </div> <div id="col1"> diff --git a/templates/qm.html b/templates/qm.html index db3edc4..06e6e0e 100644 --- a/templates/qm.html +++ b/templates/qm.html @@ -18,6 +18,7 @@ {% endblock %} {% block content %} + <h3>Location</h3> {{qm.location_description}} diff --git a/templates/registration/registration_complete.html b/templates/registration/registration_complete.html index 5351574..263cce8 100644 --- a/templates/registration/registration_complete.html +++ b/templates/registration/registration_complete.html @@ -9,5 +9,5 @@ registration_complete.html | {{ block.super }} {% endblock %} {% block content %} -Thank you for signing up, {{ user.username }}. An email with the activation code has been sent to your inbox. If you have been on the expedition in the past, you already have a profile in the system; <a href={% url profiles_select_profile %}>click here </a> to find it and link it to your account. Otherwise, please <a href={% url profiles_create_profile %}> create yourself a new profile</a>. If you have been on the expedition in the past, this step allows existing expedition data to be linked to your new account. +Thank you for signing up, {{ user.username }}. An email with the activation code has been sent to your inbox. If you have been on the expedition in the past, you already have a profile in the system; <a href={% url profiles_select_profile %}>click here </a> to find it and link it to your account. Otherwise, please <a href={% url profiles_create_profile %}> create yourself a new profile</a>. {% endblock %} \ No newline at end of file diff --git a/urls.py b/urls.py index 21da230..978493f 100644 --- a/urls.py +++ b/urls.py @@ -4,7 +4,8 @@ import troggle.settings as settings from expo.views import * # flat import from expo.views_caves import * from expo.views_survex import * - +from expo.models import * +from django.views.generic.create_update import create_object from django.contrib import admin admin.autodiscover() @@ -41,7 +42,7 @@ urlpatterns = patterns('', url(r'^survex/(.*?)\.index$', views_survex.index, name="survexindex"), url(r'^cave/(?P<cave_id>[^/]+)/?$', views_caves.cavehref), - url(r'^cave/(?P<cave_id>[^/]+)/(?P<year>\d\d\d\d)-(?P<qm_id>\d\d)?$', views_caves.qm), + url(r'^cave/(?P<cave_id>[^/]+)/(?P<year>\d\d\d\d)-(?P<qm_id>\d\d)(?P<grade>[ABCDX]?)?$', views_caves.qm, name="qm"), (r'^survex/(?P<survex_file>.*)\.svx$', svx), (r'^survex/(?P<survex_file>.*)\.3d$', threed), (r'^survex/(?P<survex_file>.*)\.log$', log), @@ -59,7 +60,8 @@ urlpatterns = patterns('', url(r'^survey/(?P<year>\d\d\d\d)\#(?P<wallet_number>\d*)$', survey, name="survey"), (r'^admin/doc/?', include('django.contrib.admindocs.urls')), - (r'^admin/(.*)', admin.site.root), + + url(r'^admin/', include(admin.site.urls),name="admin"), (r'^accounts/', include('registration.urls')), (r'^profiles/', include('profiles.urls')),