author | Tero Marttila <terom@fixme.fi> |
Thu, 15 Aug 2013 01:02:31 +0300 | |
changeset 39 | e0f2c1597f87 |
parent 38 | ed2fd40bb3f4 |
child 40 | 5eefe5a294dc |
permissions | -rw-r--r-- |
27
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
1 |
import datetime |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
2 |
|
2 | 3 |
from django.contrib import admin |
27
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
4 |
import django.utils.html |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
5 |
import django.forms.models |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
6 |
|
30 | 7 |
from qrurls.models import URL, URLItem, URLImage |
27
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
8 |
|
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
9 |
class URLItemFormset (django.forms.models.BaseInlineFormSet) : |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
10 |
def __init__ (self, *args, **kwargs) : |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
11 |
urlfeed = kwargs.get('instance') |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
12 |
|
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
13 |
publishing_date = None |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
14 |
publishing_time = datetime.time() |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
15 |
|
32 | 16 |
if urlfeed and isinstance(urlfeed, URL) : |
27
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
17 |
publishing_date = urlfeed.last_item().published.date() |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
18 |
publishing_time = urlfeed.publishing_schedule |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
19 |
|
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
20 |
def publishing_schedule (count) : |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
21 |
if not publishing_date : |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
22 |
# starting today |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
23 |
start_date = datetime.date.today() |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
24 |
offset = 0 |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
25 |
else : |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
26 |
# starting from the following day |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
27 |
start_date = publishing_date |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
28 |
offset = 1 |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
29 |
|
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
30 |
for days in xrange(offset, count + offset) : |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
31 |
yield datetime.datetime.combine( |
32 | 32 |
start_date + datetime.timedelta(days=days), |
27
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
33 |
publishing_time |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
34 |
) |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
35 |
|
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
36 |
kwargs.update(initial=[ |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
37 |
dict(published=publish) for publish in publishing_schedule(count=5) |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
38 |
]) |
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
39 |
super(URLItemFormset, self).__init__(*args, **kwargs) |
2 | 40 |
|
3 | 41 |
class URLItemInline (admin.TabularInline) : |
42 |
model = URLItem |
|
27
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
43 |
formset = URLItemFormset |
3 | 44 |
|
2 | 45 |
class URLAdmin (admin.ModelAdmin) : |
22
28a72692b749
keep shorturl case sensitive, but warn if not uppercase
Tero Marttila <terom@paivola.fi>
parents:
11
diff
changeset
|
46 |
def qrcode_url (self, obj) : |
28a72692b749
keep shorturl case sensitive, but warn if not uppercase
Tero Marttila <terom@paivola.fi>
parents:
11
diff
changeset
|
47 |
warn = None |
28a72692b749
keep shorturl case sensitive, but warn if not uppercase
Tero Marttila <terom@paivola.fi>
parents:
11
diff
changeset
|
48 |
|
28a72692b749
keep shorturl case sensitive, but warn if not uppercase
Tero Marttila <terom@paivola.fi>
parents:
11
diff
changeset
|
49 |
if obj.shorturl.upper() != obj.shorturl : |
28a72692b749
keep shorturl case sensitive, but warn if not uppercase
Tero Marttila <terom@paivola.fi>
parents:
11
diff
changeset
|
50 |
warn = "Shorturl should be UPPERCASE for most compact QR code" |
28a72692b749
keep shorturl case sensitive, but warn if not uppercase
Tero Marttila <terom@paivola.fi>
parents:
11
diff
changeset
|
51 |
|
28a72692b749
keep shorturl case sensitive, but warn if not uppercase
Tero Marttila <terom@paivola.fi>
parents:
11
diff
changeset
|
52 |
return '<a href="{url}">{url}</a>{warn}'.format( |
28a72692b749
keep shorturl case sensitive, but warn if not uppercase
Tero Marttila <terom@paivola.fi>
parents:
11
diff
changeset
|
53 |
url = django.utils.html.escape(obj.qrcode_url()), |
28a72692b749
keep shorturl case sensitive, but warn if not uppercase
Tero Marttila <terom@paivola.fi>
parents:
11
diff
changeset
|
54 |
warn = '<p class="errornote">{warn}</p>'.format(warn=warn) if warn else '', |
28a72692b749
keep shorturl case sensitive, but warn if not uppercase
Tero Marttila <terom@paivola.fi>
parents:
11
diff
changeset
|
55 |
) |
28a72692b749
keep shorturl case sensitive, but warn if not uppercase
Tero Marttila <terom@paivola.fi>
parents:
11
diff
changeset
|
56 |
qrcode_url.allow_tags = True |
28a72692b749
keep shorturl case sensitive, but warn if not uppercase
Tero Marttila <terom@paivola.fi>
parents:
11
diff
changeset
|
57 |
|
4
d56f48f6c94b
URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
58 |
def qrcode_img (self, obj) : |
d56f48f6c94b
URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
59 |
return '<img src="{img}" />'.format( |
d56f48f6c94b
URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
60 |
img=django.utils.html.escape(obj.qrcode_img()), |
d56f48f6c94b
URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
61 |
) |
d56f48f6c94b
URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
62 |
qrcode_img.allow_tags = True |
d56f48f6c94b
URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
63 |
|
d56f48f6c94b
URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
64 |
readonly_fields = ( |
d56f48f6c94b
URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
65 |
'qrcode_url', |
d56f48f6c94b
URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
66 |
'qrcode_img', |
7
8202196630d3
better reporting of active/upcoming items
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
67 |
'active_item', |
8202196630d3
better reporting of active/upcoming items
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
68 |
'upcoming_item', |
4
d56f48f6c94b
URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
69 |
) |
2 | 70 |
list_display = ( |
11
b975f7973402
show absolute url for url admin
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
71 |
'get_absolute_url', |
8
5c8a19fa6a29
display active/upcoming in list
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
72 |
'active_item', |
5c8a19fa6a29
display active/upcoming in list
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
73 |
'upcoming_item', |
2 | 74 |
) |
4
d56f48f6c94b
URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
75 |
fieldsets = ( |
d56f48f6c94b
URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
76 |
(None, { |
27
ffcffe3024f1
sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
77 |
'fields': ('shorturl', 'active_item', 'upcoming_item', 'publishing_schedule') |
4
d56f48f6c94b
URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
78 |
}), |
d56f48f6c94b
URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
79 |
("QRCode", { |
7
8202196630d3
better reporting of active/upcoming items
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
80 |
'fields': ('qrcode_url', 'qrcode_img'), |
4
d56f48f6c94b
URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
81 |
}), |
d56f48f6c94b
URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
82 |
) |
3 | 83 |
inlines = (URLItemInline, ) |
2 | 84 |
|
85 |
class URLItemAdmin (admin.ModelAdmin) : |
|
86 |
list_display = ( |
|
38 | 87 |
'shorturl', 'get_absolute_url', 'image', 'published_state', |
3 | 88 |
) |
6
e821a59bf3a7
show published state for url items
Tero Marttila <terom@fixme.fi>
parents:
4
diff
changeset
|
89 |
readonly_fields = ('published_state',) |
3 | 90 |
fieldsets = ( |
91 |
("Publishing", { |
|
92 |
'fields': ('shorturl', 'published', ), |
|
93 |
}), |
|
94 |
("Target", { |
|
32 | 95 |
'fields': ('url', 'image'), |
3 | 96 |
}), |
2 | 97 |
) |
32 | 98 |
|
2 | 99 |
|
30 | 100 |
class URLImageAdmin (admin.ModelAdmin) : |
38 | 101 |
list_display = ( |
39
e0f2c1597f87
fixup urlimage admin list_display order
Tero Marttila <terom@fixme.fi>
parents:
38
diff
changeset
|
102 |
'image', |
e0f2c1597f87
fixup urlimage admin list_display order
Tero Marttila <terom@fixme.fi>
parents:
38
diff
changeset
|
103 |
'uploaded', |
38 | 104 |
) |
30 | 105 |
# hide the "uploaded" field |
38 | 106 |
fields = ( |
107 |
'image', |
|
108 |
) |
|
30 | 109 |
readonly_fields = ( |
110 |
'uploaded', |
|
111 |
) |
|
32 | 112 |
|
113 |
inlines = (URLItemInline, ) |
|
30 | 114 |
|
2 | 115 |
admin.site.register(URL, URLAdmin) |
116 |
admin.site.register(URLItem, URLItemAdmin) |
|
32 | 117 |
admin.site.register(URLImage, URLImageAdmin) |