|
@@ -1,12 +1,14 @@
|
|
import datetime
|
|
import datetime
|
|
import json
|
|
import json
|
|
|
|
+from django.apps.registry import apps
|
|
from django.core.serializers.json import DjangoJSONEncoder
|
|
from django.core.serializers.json import DjangoJSONEncoder
|
|
from django.http import HttpResponse
|
|
from django.http import HttpResponse
|
|
-from django.core.urlresolvers import reverse, resolve
|
|
|
|
|
|
+from django.core.urlresolvers import reverse, resolve, NoReverseMatch
|
|
from django.contrib import admin
|
|
from django.contrib import admin
|
|
from django.contrib.admin import AdminSite
|
|
from django.contrib.admin import AdminSite
|
|
from django.utils.encoding import smart_text
|
|
from django.utils.encoding import smart_text
|
|
-from jet import settings
|
|
|
|
|
|
+from django.utils.text import capfirst
|
|
|
|
+import six
|
|
from django.contrib import messages
|
|
from django.contrib import messages
|
|
from django.utils.encoding import force_text
|
|
from django.utils.encoding import force_text
|
|
from django.utils.functional import Promise
|
|
from django.utils.functional import Promise
|
|
@@ -33,13 +35,63 @@ class JsonResponse(HttpResponse):
|
|
super(JsonResponse, self).__init__(content=data, **kwargs)
|
|
super(JsonResponse, self).__init__(content=data, **kwargs)
|
|
|
|
|
|
|
|
|
|
-def get_app_list(context):
|
|
|
|
- template_response = get_admin_site(context.get('current_app', '')).index(context['request'])
|
|
|
|
-
|
|
|
|
- try:
|
|
|
|
- return template_response.context_data['app_list']
|
|
|
|
- except Exception:
|
|
|
|
- return None
|
|
|
|
|
|
+def get_app_list(context, order=True):
|
|
|
|
+ admin_site = get_admin_site(context.get('current_app', ''))
|
|
|
|
+ request = context['request']
|
|
|
|
+
|
|
|
|
+ app_dict = {}
|
|
|
|
+ for model, model_admin in admin_site._registry.items():
|
|
|
|
+ app_label = model._meta.app_label
|
|
|
|
+ has_module_perms = model_admin.has_module_permission(request)
|
|
|
|
+
|
|
|
|
+ if has_module_perms:
|
|
|
|
+ perms = model_admin.get_model_perms(request)
|
|
|
|
+
|
|
|
|
+ # Check whether user has any perm for this module.
|
|
|
|
+ # If so, add the module to the model_list.
|
|
|
|
+ if True in perms.values():
|
|
|
|
+ info = (app_label, model._meta.model_name)
|
|
|
|
+ model_dict = {
|
|
|
|
+ 'name': capfirst(model._meta.verbose_name_plural),
|
|
|
|
+ 'object_name': model._meta.object_name,
|
|
|
|
+ 'perms': perms,
|
|
|
|
+ }
|
|
|
|
+ if perms.get('change', False):
|
|
|
|
+ try:
|
|
|
|
+ model_dict['admin_url'] = reverse('admin:%s_%s_changelist' % info, current_app=admin_site.name)
|
|
|
|
+ except NoReverseMatch:
|
|
|
|
+ pass
|
|
|
|
+ if perms.get('add', False):
|
|
|
|
+ try:
|
|
|
|
+ model_dict['add_url'] = reverse('admin:%s_%s_add' % info, current_app=admin_site.name)
|
|
|
|
+ except NoReverseMatch:
|
|
|
|
+ pass
|
|
|
|
+ if app_label in app_dict:
|
|
|
|
+ app_dict[app_label]['models'].append(model_dict)
|
|
|
|
+ else:
|
|
|
|
+ app_dict[app_label] = {
|
|
|
|
+ 'name': apps.get_app_config(app_label).verbose_name,
|
|
|
|
+ 'app_label': app_label,
|
|
|
|
+ 'app_url': reverse(
|
|
|
|
+ 'admin:app_list',
|
|
|
|
+ kwargs={'app_label': app_label},
|
|
|
|
+ current_app=admin_site.name,
|
|
|
|
+ ),
|
|
|
|
+ 'has_module_perms': has_module_perms,
|
|
|
|
+ 'models': [model_dict],
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ # Sort the apps alphabetically.
|
|
|
|
+ app_list = list(six.itervalues(app_dict))
|
|
|
|
+
|
|
|
|
+ if order:
|
|
|
|
+ app_list.sort(key=lambda x: x['name'].lower())
|
|
|
|
+
|
|
|
|
+ # Sort the models alphabetically within each app.
|
|
|
|
+ for app in app_list:
|
|
|
|
+ app['models'].sort(key=lambda x: x['name'])
|
|
|
|
+
|
|
|
|
+ return app_list
|
|
|
|
|
|
|
|
|
|
def get_admin_site(current_app):
|
|
def get_admin_site(current_app):
|