| 
					
				 | 
			
			
				@@ -1,12 +1,14 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import datetime 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import json 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from django.apps.registry import apps 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from django.core.serializers.json import DjangoJSONEncoder 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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.admin import AdminSite 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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.utils.encoding import force_text 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from django.utils.functional import Promise 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -33,13 +35,63 @@ class JsonResponse(HttpResponse): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         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): 
			 |