from django.db import models
from django.contrib import admin
+from django.contrib.auth.admin import UserAdmin
+from django.contrib.auth.models import User
from django.contrib.admin.filterspecs import RelatedFilterSpec, FilterSpec
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
from django.utils.encoding import smart_unicode, iri_to_uri
from django.http import HttpResponseRedirect
-from models import SourceActualite, Actualite, Discipline, Evenement, Record, ListSet, HarvestLog
+from models import SourceActualite, Actualite, Discipline, Evenement, Record, ListSet, HarvestLog, Profile
from savoirs.globals import META
admin.site.register(Actualite)
def has_output(self):
return self.server_name is not None
- def title(self):
- return self.lookup_title
-
FilterSpec.filter_specs.insert(0, (lambda f: f.name == 'listsets', ListSetFilterSpec))
# Ces deux classes permettent d'implémenter la possibilité d'avoir un champs readonly_fields
'language',
'disciplines',
'thematiques',
- 'listsets',
'pays',
'regions',
'validated',
'format',
'type',
- #SEP 2 (aucune données récoltées)
- #'alt_title',
- #'abstract',
- #'creation',
- #'issued',
- #'isbn',
- #'orig_lang',
- 'validated',
+ #SEP 2 (aucune données récoltées)
+ #'alt_title',
+ #'abstract',
+ #'creation',
+ #'issued',
+ #'isbn',
+ #'orig_lang',
+ 'est_complet',
+ 'validated',
)
actions = ['assigner_pays',
'assigner_regions',
self.readonly_fields = META.keys()
self.readonly_fields.append('listsets')
super(RecordAdmin, self).__init__(*args, **kwargs)
+
+ def est_complet(self, obj):
+ """ """
+ v = obj.est_complet()
+ return '<img src="/admin_media/img/admin/icon-%s.gif" alt="%d"/>' % (('no','yes')[v], v)
+ est_complet.allow_tags = True
def _uri(self, obj):
""" """
list_filter = ('context',)
admin.site.register(HarvestLog, HarvestLogAdmin)
+
+class ProfileInline(admin.TabularInline):
+ model = Profile
+ fk_name = 'user'
+ max_num = 1
+
+class UserProfileAdmin(UserAdmin):
+ inlines = [ProfileInline, ]
+
+admin.site.unregister(User)
+admin.site.register(User, UserProfileAdmin)
+
# -*- encoding: utf-8 -*-
from django import forms
from django.http import HttpResponseRedirect
+from django.core.urlresolvers import reverse
from django.contrib.auth.decorators import login_required
from django.template import Context, RequestContext
from django.shortcuts import render_to_response
from datamaster_modeles.models import Thematique, Pays, Region
from savoirs.models import Record, Discipline
+# Dashboard
+class RecordDashboard:
+ """Cette classe permet d'afficher une liste de tâche à faire en fonction de l'usagé"""
+ context = None
+
+ def __init__(self, context):
+ """Récupère le context"""
+ self.context = context
+
+ def get_fitre_serveurs(self,):
+ """Retourner la liste des serveurs sélectionnés.
+ S'il n'y en a pas, tous les serveurs sont retournés."""
+ try:
+ user = self.context.get('user')
+ profile = user.get_profile()
+ serveurs = profile.serveurs.all()
+ except:
+ serveurs = Serveur.objects.all()
+ return [s.nom for s in serveurs]
+
+
+ def total_a_faire(self,):
+ """Retourne le total des références à traiter"""
+ return len(self.tout_mes_records())
+
+ def tout_mes_records(self,):
+ """Retourne la liste des références à traiter en fonction du filtre"""
+ filtre = self.get_fitre_serveurs()
+ return [r for r in Record.objects.filter(server__in=filtre) if not r.est_complet()]
+
+ def mes_records(self,):
+ """Retourne la liste des références à traiter en fonction du filtre"""
+ return self.tout_mes_records()
+
+ def ref_apercu(self, record):
+ return "[%s] %s" % (record.server, record.title)
+
+ def change_url(self, object):
+ """Retourne l'url pour éditer le record"""
+ return reverse('admin:%s_%s_change' %(object._meta.app_label, object._meta.module_name), args=[object.id])
+
+ def a_traiter(self, ):
+ """Retourne la structure de données nécessaire pour le widget de django-admin-tool"""
+ records = self.mes_records()
+ return [{'title':self.ref_apercu(r), 'url':self.change_url(r), 'external': False} for r in records]
+
# Admin views pour les associations par lots
class PaysForm(forms.Form):
# -*- encoding: utf-8 -*-
+from django.contrib.auth.models import User
from django.db import models
+from django.db.models.signals import post_save
import simplejson
import uuid, datetime
from timezones.fields import TimeZoneField
+from auf_savoirs_en_partage.backend_config import RESOURCES
from savoirs.globals import META
from datamaster_modeles.models import Thematique, Pays, Region
pays = models.ManyToManyField(Pays)
regions = models.ManyToManyField(Region)
+ def est_complet(self,):
+ """teste si le record à toutes les données obligatoires"""
+ return self.disciplines.count() > 0 and \
+ self.thematiques.count() > 0 and \
+ self.pays.count() > 0 and \
+ self.regions.count() > 0
+
def __unicode__(self):
return "R[%s] %s" % (self.id, self.title)
#
#models.signals.post_init.connect(decode_json, Record)
+class Serveur(models.Model):
+ nom = models.CharField(primary_key = True, max_length = 255)
+
+ def __unicode__(self,):
+ return self.nom
+
+ def conf_2_db(self,):
+ for k in RESOURCES.keys():
+ s, created = Serveur.objects.get_or_create(nom=k)
+ s.nom = k
+ s.save()
+
+class Profile(models.Model):
+ user = models.ForeignKey(User, unique=True)
+ serveurs = models.ManyToManyField(Serveur, null = True, blank = True)
class HarvestLog(models.Model):
context = models.CharField(max_length = 255)
INSTALLED_APPS = (
+ 'admin_tools',
+ 'admin_tools.theming',
+ 'admin_tools.menu',
+ 'admin_tools.dashboard',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
ROA_CUSTOM_ARGS = {'api-key': ROA_API_KEY}
+ADMIN_TOOLS_INDEX_DASHBOARD = 'auf_savoirs_en_partage.dashboard.CustomIndexDashboard'
+
+AUTH_PROFILE_MODULE = 'savoirs.Profile'
+
from auf_references_client.settings import *
-from django.conf.urls.defaults import patterns, include, handler500
+from django.conf.urls.defaults import patterns, include, handler500, url
from django.conf import settings
from django.contrib import admin
urlpatterns = patterns(
'',
+ url(r'^admin_tools/', include('admin_tools.urls')),
+ (r'^admin/', include(admin.site.urls)),
(r'^admin/assigner_pays', 'savoirs.admin_views.assigner_pays'),
(r'^admin/assigner_regions', 'savoirs.admin_views.assigner_regions'),
(r'^admin/assigner_thematiques', 'savoirs.admin_views.assigner_thematiques'),
django_sorting
datamaster_modeles
django-roa
+ django-admin-tools
[articles]
recipe = buildout_script