diff --git a/core/admin.py b/core/admin.py
index 1a46d04..438281e 100644
--- a/core/admin.py
+++ b/core/admin.py
@@ -2,7 +2,6 @@ from troggle.core.models import *
from django.contrib import admin
from django.forms import ModelForm
import django.forms as forms
-from core.forms import LogbookEntryForm
from django.http import HttpResponse
from django.core import serializers
from core.views_other import downloadLogbook
@@ -42,6 +41,7 @@ class QMsFoundInline(admin.TabularInline):
model=QM
fk_name='found_by'
fields=('number','grade','location_description','comment')#need to add foreignkey to cave part
+ extra=1
class PhotoInline(admin.TabularInline):
model = Photo
@@ -51,6 +51,7 @@ class PhotoInline(admin.TabularInline):
class PersonTripInline(admin.TabularInline):
model = PersonTrip
exclude = ['persontrip_next','Delete']
+ raw_id_fields = ('person_expedition',)
extra = 1
#class LogbookEntryAdmin(VersionAdmin):
@@ -59,8 +60,10 @@ class LogbookEntryAdmin(TroggleModelAdmin):
search_fields = ('title','expedition__year')
date_heirarchy = ('date')
inlines = (PersonTripInline, PhotoInline, QMsFoundInline)
- form = LogbookEntryForm
-
+ class Media:
+ css = {
+ "all": ("css/troggleadmin.css",)
+ }
actions=('export_logbook_entries_as_html','export_logbook_entries_as_txt')
def export_logbook_entries_as_html(modeladmin, request, queryset):
@@ -87,6 +90,7 @@ class QMAdmin(TroggleModelAdmin):
list_display_links = ('__unicode__',)
list_editable = ('found_by','ticked_off_by','grade')
list_per_page = 20
+ raw_id_fields=('found_by','ticked_off_by')
class PersonExpeditionAdmin(TroggleModelAdmin):
search_fields = ('person__first_name','expedition__year')
diff --git a/core/models.py b/core/models.py
index c438a92..cb2d8d4 100644
--- a/core/models.py
+++ b/core/models.py
@@ -549,7 +549,7 @@ class QM(TroggleModel):
return u"%s %s" % (self.code(), self.grade)
def code(self):
- return u"%s-%s-%s" % (self.found_by.date.year, self.found_by.cave, self.number
+ return u"%s-%s-%s" % (unicode(self.found_by.cave)[6:], self.found_by.date.year, self.number)
def get_absolute_url(self):
#return settings.URL_ROOT + '/cave/' + self.found_by.cave.kataster_number + '/' + str(self.found_by.date.year) + '-' + '%02d' %self.number
@@ -562,10 +562,7 @@ class QM(TroggleModel):
return QM.objects.get(id=self.id-1)
def wiki_link(self):
- res = '[[cave:' + str(self.found_by.cave.kataster_number) + ' '
- res += 'QM:' + str(self.found_by.date.year) + '-'
- res += str(self.number) + self.grade + ']]'
- return res
+ return u"%s%s%s" % ('[[QM:',self.code(),']]')
photoFileStorage = FileSystemStorage(location=settings.PHOTOS_ROOT, base_url=settings.PHOTOS_URL)
class Photo(TroggleImageModel):
diff --git a/core/templatetags/wiki_markup.py b/core/templatetags/wiki_markup.py
index 8307458..fabd11b 100644
--- a/core/templatetags/wiki_markup.py
+++ b/core/templatetags/wiki_markup.py
@@ -3,7 +3,7 @@ from django.utils.html import conditional_escape
from django.template.defaultfilters import stringfilter
from django.utils.safestring import mark_safe
from django.conf import settings
-from core.models import QM, Photo
+from core.models import QM, Photo, LogbookEntry, Cave
import re, urlparse
register = template.Library()
@@ -79,14 +79,23 @@ def wiki_to_html_short(value, autoescape=None):
[[QM:C204-1999-24]]
If the QM does not exist, the function will return a link for creating it.
"""
- qmdict={'urlroot':url_root,'cave':matchobj.groups()[2],'year':matchobj.groups()[1],'number':matchobj.groups()[3]}
+ qmdict={'urlroot':url_root,'cave':matchobj.groups()[1],'year':matchobj.groups()[2],'number':matchobj.groups()[3]}
try:
qm=QM.objects.get(found_by__cave__kataster_number = qmdict['cave'],
found_by__date__year = qmdict['year'],
number = qmdict['number'])
- return r'%s %s' % ("insert url lookup here", qm.code, unicode(qm))
- except QM.DoesNotExist:
- return r'%(cave)s:%(year)s-%(number)s%(grade)s' % qmdict
+ return r'%s' % (qm.get_absolute_url(), qm.code, unicode(qm))
+ except QM.DoesNotExist: #bother aaron to make him clean up the below code
+ try:
+ placeholder=LogbookEntry.objects.get(date__year=qmdict['year'],cave__kataster_number=qmdict['cave'], title__icontains='placeholder')
+ except LogbookEntry.DoesNotExist:
+ placeholder=LogbookEntry(
+ date='01-01'+qmdict['year'],
+ cave=Cave.objects.get(kataster_number=qmdict['cave']),
+ title='placeholder'
+ )
+ qm=QM(found_by = placeholder, number = qmdict['number'])
+ return r'%s %s' % (qm.get_absolute_url, qm.code, unicode(qm))
value = re.sub(qmMatchPattern,qmrepl, value, re.DOTALL)
diff --git a/core/views_other.py b/core/views_other.py
index 4a10a53..b2bc9cd 100644
--- a/core/views_other.py
+++ b/core/views_other.py
@@ -1,5 +1,5 @@
-from troggle.core.models import Cave, Expedition, Person, LogbookEntry, PersonExpedition, PersonTrip, Photo
-import troggle.settings as settings
+from troggle.core.models import Cave, Expedition, Person, LogbookEntry, PersonExpedition, PersonTrip, Photo, QM
+from django.conf import settings
from django import forms
from django.template import loader, Context
from django.db.models import Q
@@ -146,7 +146,7 @@ def ajax_test(request):
mimetype="application/json")
def eyecandy(request):
- return render_with_context(request,'eyecandy.html', {})
+ return
def ajax_QM_number(request):
if request.method=='POST':
@@ -156,4 +156,55 @@ def ajax_QM_number(request):
print exp
res=cave.new_QM_number(exp.year)
- return HttpResponse(res)
\ No newline at end of file
+ return HttpResponse(res)
+
+def logbook_entry_suggestions(request):
+ """
+ Generates a html box with suggestions about what to do with QMs
+ in logbook entry text.
+ """
+ unwiki_QM_pattern=r"(?P(?P[ABC]?)(?P\d*)-?(?P\d\d\d?\d?)-(?P\d\d)(?P[ABCDXV]?)(?=\s))"
+ unwiki_QM_pattern=re.compile(unwiki_QM_pattern)
+ wikilink_QM_pattern=settings.QM_PATTERN
+
+ slug=request.POST['slug']
+ date=request.POST['date']
+ lbo=LogbookEntry.objects.get(slug=slug, date=date)
+
+ #unwiki_QMs=re.findall(unwiki_QM_pattern,lbo.text)
+ unwiki_QMs=[m.groupdict() for m in unwiki_QM_pattern.finditer(lbo.text)]
+
+ print unwiki_QMs
+ for qm in unwiki_QMs:
+ if len(qm['year'])==2:
+ if int(qm['year'])<50:
+ qm['year']='20'+qm['year']
+ else:
+ qm['year']='19'+qm['year']
+
+ temp_QM=QM(found_by=lbo,number=qm['number'],grade=qm['grade'])
+ try:
+ temp_QM.grade=unwiki_QM['grade']
+ except:
+ pass
+ qm['wikilink']=temp_QM.wiki_link()
+
+ print unwiki_QMs
+
+
+ wikilink_QMs=re.findall(wikilink_QM_pattern,lbo.text)
+ attached_QMs=lbo.QMs_found.all()
+ unmentioned_attached_QMs=''#not implemented, fill this in by subtracting wiklink_QMs from attached_QMs
+
+ #Find unattached_QMs. We only look at the QMs with a proper wiki link.
+ #for qm in wikilink_QMs:
+ #Try to look up the QM.
+
+ print 'got 208'
+ any_suggestions=True
+ print 'got 210'
+ return render_with_context(request,'suggestions.html',
+ {
+ 'unwiki_QMs':unwiki_QMs,
+ 'any_suggestions':any_suggestions
+ })
\ No newline at end of file
diff --git a/media/js/QM_helper.js b/media/js/QM_helper.js
index 785d193..69b6ede 100644
--- a/media/js/QM_helper.js
+++ b/media/js/QM_helper.js
@@ -1,5 +1,6 @@
$(document).ready(function(){
+/*begin ajax query stuff for getting next QM number*/
$('.number:first').append("get next number");
new_qm_link=function(e){
@@ -16,5 +17,63 @@ alert('Please choose a cave and try again.')
};
$('.next_qm_link').bind("click", new_qm_link);
+/*end ajax query stuff for getting next QM number*/
+
+/*begin ajax query stuff for getting suggestions view*/
+
+
+
+suggestions_query=function(){
+slug=$('#id_slug')[0].value;
+date=$('#id_date')[0].value;
+$.post('/lbo_suggestions/',{'slug':slug,'date':date}, function(data){
+ if ($('#suggestions').length>0){
+ $('#suggestions').replaceWith(data);
+ }
+ else{
+ $('#id_text').parent().append(data);
+ }
+});
+};
+
+$('#id_text').parent().append("get / update suggestions");
+
+$(".update_suggestions").bind("click", suggestions_query);
+
+replace=function(from,to){
+ $('#id_text').text($('#id_text').text().replace(from,to))
+ $('[name=_continue]').click()
+
+ }
+
+suggestions_query();
+/*end*/
+
+
+
+/*begin reccomendations stuff*/
+
+
+/*search for QMs
+suspect_QMs=$('#id_text')[0].value.match(/\b(\d\d)-(\d\d\w?)\b/g);
+linked_QMs=
+
+$('#suggestions').append(
+"\
+May I reccomend:
\
+Putting in wikilinks for the following QMs:\
+"
+);
+$('#suggestions').append(''+suspect_QMs.join('')+);*/
+
+
+/*end reccomendations stuff*/
+
+
+
+
+
+
+
});
\ No newline at end of file
diff --git a/urls.py b/urls.py
index 5226598..a128bd3 100644
--- a/urls.py
+++ b/urls.py
@@ -2,6 +2,7 @@ from django.conf.urls.defaults import *
from django.conf import settings
from core.views import * # flat import
+from core.views_other import *
from core.views_caves import *
from core.views_survex import *
from core.models import *
@@ -17,8 +18,9 @@ urlpatterns = patterns('',
url(r'^caves/?$', views_caves.caveindex, name="caveindex"),
url(r'^people/?$', views_logbooks.personindex, name="personindex"),
-
+
url(r'^newqmnumber/?$', views_other.ajax_QM_number, ),
+ url(r'^lbo_suggestions/?$', logbook_entry_suggestions),
#(r'^person/(?P\d*)/?$', views_logbooks.person),
url(r'^person/(?P[A-Z]*[a-z\-\']*)[^a-zA-Z]*(?P[a-z\-\']*[^a-zA-Z]*[A-Z]*[a-z\-]*)/?', views_logbooks.person, name="person"),
#url(r'^person/(\w+_\w+)$', views_logbooks.person, name="person"),