class IssuerAdmin(DjangoObjectActions, ModelAdmin): readonly_fields = ('created_at', 'created_by', 'old_json', 'source', 'source_url', 'entity_id', 'archived') list_display = ('name_english', 'name_dutch', 'img', 'entity_id', 'created_by', 'created_at', 'archived', admin_list_linkify('faculty', 'name_english'), admin_list_linkify('institution', 'name_english')) list_display_links = ('name_english', ) list_filter = ('created_at', ) search_fields = ('name_english', 'name_dutch', 'entity_id') fieldsets = ( ('Metadata', { 'fields': ('created_by', 'created_at', 'source', 'source_url', 'entity_id'), 'classes': ("collapse", ) }), (None, { 'fields': ('image_dutch', 'image_english', 'name_english', 'url_english', 'name_dutch', 'url_dutch', 'email', 'description_english', 'description_dutch', 'badgrapp', 'archived') }), ('JSON', { 'fields': ('old_json', ) }), ('Faculties', { 'fields': ('faculty', ) }), ) inlines = [IssuerStaffInline, IssuerExtensionInline] change_actions = ['redirect_badgeclasses'] def img(self, obj): try: return '<img src="{}" width="32"/>'.format(obj.image.url) except ValueError: return obj.image img.short_description = 'Image' img.allow_tags = True def redirect_badgeclasses(self, request, obj): return HttpResponseRedirect( reverse('admin:issuer_badgeclass_changelist') + '?issuer__id={}'.format(obj.id)) redirect_badgeclasses.label = "BadgeClasses" redirect_badgeclasses.short_description = "See this issuer's defined BadgeClasses"
class TermsAdmin(ModelAdmin): list_display = ('terms_type', admin_list_linkify('institution', 'name'), 'version', 'created_at', 'terms_url_count') readonly_fields = ('created_at', 'created_by', 'updated_at', 'updated_by', 'entity_id') inlines = [TermsUrlInline] def terms_url_count(self, obj): return len(obj.terms_urls.all())
class BadgeUserAdmin(UserAdmin): readonly_fields = ('email', 'first_name', 'last_name', 'entity_id', 'date_joined', 'last_login', 'username', 'entity_id') list_display = ('last_name', 'first_name', 'email', 'is_active', 'is_staff', 'date_joined', admin_list_linkify('institution', 'name')) list_filter = ('is_active', 'is_staff', 'is_superuser', 'date_joined', 'last_login') search_fields = ('email', 'first_name', 'last_name', 'username', 'entity_id') fieldsets = ( ('Metadata', {'fields': ('entity_id', 'username', 'date_joined',), 'classes': ('collapse',)}), (None, {'fields': ('email', 'first_name', 'last_name')}), ('Access', {'fields': ('is_active', 'is_staff', 'password')}), ('Permissions', {'fields': ('groups',)}), ) filter_horizontal = ('groups', 'user_permissions', 'faculty',) inlines = [ EmailAddressInline, ]
class TermsUrlAdmin(ModelAdmin): list_display = ('url', 'language', admin_list_linkify('terms', 'terms_type'))
class StudentsEnrolledAdmin(admin.ModelAdmin): list_display = ('date_created', 'date_consent_given', 'date_awarded', 'badge_instance', admin_list_linkify('badge_class', 'name'), admin_list_linkify('user', 'full_name'))
class FacultyAdmin(admin.ModelAdmin): list_display = ('name_english', 'name_dutch') readonly_fields = ('entity_id', 'created_by', 'updated_by', 'institution') list_display = ('name_english', 'entity_id', admin_list_linkify('institution', 'name'))
class InstitutionStaffAdmin(ModelAdmin): list_display = ('user', admin_list_linkify('institution', 'name'), 'may_create', 'may_read', 'may_update', 'may_delete', 'may_award', 'may_sign', 'may_administrate_users')
class BadgeclassStaffAdmin(ModelAdmin): list_display = ('user', admin_list_linkify('badgeclass', 'name'), 'may_create', 'may_read', 'may_update', 'may_delete', 'may_award', 'may_sign', 'may_administrate_users')
class BadgeClassAdmin(DjangoObjectActions, ModelAdmin): readonly_fields = ('created_at', 'created_by', 'old_json', 'source', 'source_url', 'entity_id') list_display = ('name', 'badge_image', 'entity_id', 'archived', admin_list_linkify('issuer', 'name'), admin_list_linkify('institution', 'name')) list_display_links = ( 'badge_image', 'name', ) list_filter = ('created_at', ) search_fields = ( 'name', 'entity_id', 'issuer__name', ) raw_id_fields = ('issuer', ) fieldsets = ( ('Metadata', { 'fields': ('created_by', 'created_at', 'source', 'source_url', 'entity_id'), 'classes': ("collapse", ) }), (None, { 'fields': ('issuer', 'image', 'name', 'description', 'archived') }), ('Criteria', { 'fields': ( 'criteria_url', 'criteria_text', ) }), ('JSON', { 'fields': ('old_json', ) }), ) inlines = [ BadgeClassTagInline, BadgeClassAlignmentInline, BadgeClassExtensionInline, ] change_actions = [ 'redirect_issuer', 'redirect_instances', 'redirect_pathwaybadges' ] def badge_image(self, obj): return '<img src="{}" width="32"/>'.format( obj.image.url) if obj.image else '' badge_image.short_description = 'Badge' badge_image.allow_tags = True def issuer_link(self, obj): return '<a href="{}">{}</a>'.format( reverse("admin:issuer_issuer_change", args=(obj.issuer.id, )), obj.issuer.name) issuer_link.allow_tags = True def redirect_instances(self, request, obj): return HttpResponseRedirect( reverse('admin:issuer_badgeinstance_changelist') + '?badgeclass__id={}'.format(obj.id)) redirect_instances.label = "Instances" redirect_instances.short_description = "See awarded instances of this BadgeClass" def redirect_issuer(self, request, obj): return HttpResponseRedirect( reverse('admin:issuer_issuer_change', args=(obj.issuer.id, ))) redirect_issuer.label = "Issuer" redirect_issuer.short_description = "See this Issuer" def redirect_pathwaybadges(self, request, obj): return HttpResponseRedirect( reverse('admin:pathway_pathwayelementbadge_changelist') + '?badgeclass__id={}'.format(obj.id)) redirect_pathwaybadges.label = "Pathway Badges" redirect_pathwaybadges.short_description = "Pathway Badges"
class BadgeInstanceExtensionAdmin(ModelAdmin): list_display = ('name', admin_list_linkify('badge_instance')) search_fields = ('name', 'original_json')
class IssuerExtensionAdmin(ModelAdmin): list_display = ('name', admin_list_linkify('issuer', 'name')) search_fields = ('name', 'original_json')
class BadgeInstanceAdmin(DjangoObjectActions, ModelAdmin): readonly_fields = ('created_at', 'created_by', 'updated_at', 'updated_by', 'image', 'entity_id', 'old_json', 'salt', 'entity_id', 'source', 'source_url') list_display = ('badge_image', 'user', 'entity_id', admin_list_linkify('badgeclass', 'name'), admin_list_linkify('issuer', 'name')) list_display_links = ('badge_image', ) list_filter = ('created_at', ) search_fields = ('recipient_identifier', 'entity_id', 'badgeclass__name', 'issuer__name') raw_id_fields = ('badgeclass', 'issuer') fieldsets = ( ('Metadata', { 'fields': ('source', 'source_url', 'created_by', 'created_at', 'updated_by', 'updated_at', 'entity_id', 'salt'), 'classes': ("collapse", ) }), ('Badgeclass', { 'fields': ('badgeclass', 'issuer') }), ('Assertion', { 'fields': ('public', 'acceptance', 'recipient_type', 'recipient_identifier', 'image', 'issued_on', 'expires_at') }), ('Revocation', { 'fields': ('revoked', 'revocation_reason') }), ('JSON', { 'fields': ('old_json', ) }), ) actions = ['rebake'] change_actions = ['redirect_issuer', 'redirect_badgeclass'] inlines = [BadgeInstanceExtensionInline] def rebake(self, request, queryset): for obj in queryset: obj.rebake(save=True) rebake.short_description = "Rebake selected badge instances" def badge_image(self, obj): try: return '<img src="{}" width="32"/>'.format(obj.image.url) except ValueError: return obj.image badge_image.short_description = 'Badge' badge_image.allow_tags = True def has_add_permission(self, request): return False def redirect_badgeclass(self, request, obj): return HttpResponseRedirect( reverse('admin:issuer_badgeclass_change', args=(obj.badgeclass.id, ))) redirect_badgeclass.label = "BadgeClass" redirect_badgeclass.short_description = "See this BadgeClass" def redirect_issuer(self, request, obj): return HttpResponseRedirect( reverse('admin:issuer_issuer_change', args=(obj.issuer.id, ))) redirect_issuer.label = "Issuer" redirect_issuer.short_description = "See this Issuer"