terom@27: import datetime terom@27: terom@2: from django.contrib import admin terom@27: import django.utils.html terom@27: import django.forms.models terom@27: terom@30: from qrurls.models import URL, URLItem, URLImage terom@27: terom@27: class URLItemFormset (django.forms.models.BaseInlineFormSet) : terom@27: def __init__ (self, *args, **kwargs) : terom@27: urlfeed = kwargs.get('instance') terom@27: terom@27: publishing_date = None terom@27: publishing_time = datetime.time() terom@27: terom@32: if urlfeed and isinstance(urlfeed, URL) : terom@27: publishing_date = urlfeed.last_item().published.date() terom@27: publishing_time = urlfeed.publishing_schedule terom@27: terom@27: def publishing_schedule (count) : terom@27: if not publishing_date : terom@27: # starting today terom@27: start_date = datetime.date.today() terom@27: offset = 0 terom@27: else : terom@27: # starting from the following day terom@27: start_date = publishing_date terom@27: offset = 1 terom@27: terom@27: for days in xrange(offset, count + offset) : terom@27: yield datetime.datetime.combine( terom@32: start_date + datetime.timedelta(days=days), terom@27: publishing_time terom@27: ) terom@27: terom@27: kwargs.update(initial=[ terom@27: dict(published=publish) for publish in publishing_schedule(count=5) terom@27: ]) terom@27: super(URLItemFormset, self).__init__(*args, **kwargs) terom@2: terom@3: class URLItemInline (admin.TabularInline) : terom@3: model = URLItem terom@27: formset = URLItemFormset terom@3: terom@2: class URLAdmin (admin.ModelAdmin) : terom@22: def qrcode_url (self, obj) : terom@22: warn = None terom@22: terom@22: if obj.shorturl.upper() != obj.shorturl : terom@22: warn = "Shorturl should be UPPERCASE for most compact QR code" terom@22: terom@22: return '{url}{warn}'.format( terom@22: url = django.utils.html.escape(obj.qrcode_url()), terom@22: warn = '

{warn}

'.format(warn=warn) if warn else '', terom@22: ) terom@22: qrcode_url.allow_tags = True terom@22: terom@4: def qrcode_img (self, obj) : terom@4: return ''.format( terom@4: img=django.utils.html.escape(obj.qrcode_img()), terom@4: ) terom@4: qrcode_img.allow_tags = True terom@4: terom@4: readonly_fields = ( terom@4: 'qrcode_url', terom@4: 'qrcode_img', terom@7: 'active_item', terom@7: 'upcoming_item', terom@4: ) terom@2: list_display = ( terom@11: 'get_absolute_url', terom@8: 'active_item', terom@8: 'upcoming_item', terom@2: ) terom@4: fieldsets = ( terom@4: (None, { terom@27: 'fields': ('shorturl', 'active_item', 'upcoming_item', 'publishing_schedule') terom@4: }), terom@4: ("QRCode", { terom@7: 'fields': ('qrcode_url', 'qrcode_img'), terom@4: }), terom@4: ) terom@3: inlines = (URLItemInline, ) terom@2: terom@2: class URLItemAdmin (admin.ModelAdmin) : terom@2: list_display = ( terom@38: 'shorturl', 'get_absolute_url', 'image', 'published_state', terom@3: ) terom@6: readonly_fields = ('published_state',) terom@3: fieldsets = ( terom@3: ("Publishing", { terom@3: 'fields': ('shorturl', 'published', ), terom@3: }), terom@3: ("Target", { terom@32: 'fields': ('url', 'image'), terom@3: }), terom@2: ) terom@32: terom@2: terom@30: class URLImageAdmin (admin.ModelAdmin) : terom@38: list_display = ( terom@39: 'image', terom@39: 'uploaded', terom@38: ) terom@30: # hide the "uploaded" field terom@38: fields = ( terom@38: 'image', terom@38: ) terom@30: readonly_fields = ( terom@30: 'uploaded', terom@30: ) terom@32: terom@32: inlines = (URLItemInline, ) terom@30: terom@2: admin.site.register(URL, URLAdmin) terom@2: admin.site.register(URLItem, URLItemAdmin) terom@32: admin.site.register(URLImage, URLImageAdmin)