Intégré auf.django.admingroup
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / sitotheque / models.py
CommitLineData
01a9197e 1# -*- encoding: utf-8 -*-
39a63232 2from datamaster_modeles.models import *
01a9197e 3from django.db import models
878de341 4from django.db.models import Q
39a63232
EMS
5from djangosphinx.models import SphinxSearch
6from savoirs.models import Discipline, SEPManager, SEPSphinxQuerySet, SEPQuerySet
01a9197e 7
8TYPE_SITE_CHOICES = (
9 ('RV', 'Revue en ligne'),
10 ('BB', 'Bibliothèque en ligne'),
00755d9b 11 ('FD', 'Fonds documentaire'),
01a9197e 12 ('AR', 'Archive ouverte'),
13 ('CO', 'Cours en ligne'),
00755d9b
AJ
14 ('RE', 'Repertoire de ressource'),
15 ('SA', 'Site associatif'),
16 ('SC', 'Site culturel'),
17 ('SI', 'Site d\'information'),
01a9197e 18 ('AU', 'Autre type de site'),
19 )
20
39a63232 21class SiteQuerySet(SEPQuerySet):
878de341 22
39a63232
EMS
23 def filter_pays(self, pays):
24 return self.filter(pays=pays)
878de341 25
39a63232 26class SiteSphinxQuerySet(SEPSphinxQuerySet):
878de341 27
39a63232
EMS
28 def __init__(self, model=None):
29 SEPSphinxQuerySet.__init__(self, model=model, index='savoirsenpartage_sites', weights=dict(titre=3))
c1b134f8 30
39a63232
EMS
31 def filter_pays(self, pays):
32 return self.filter(pays_ids=pays.id)
c1b134f8 33
39a63232 34class SiteManager(SEPManager):
878de341 35
39a63232
EMS
36 def get_query_set(self):
37 return SiteQuerySet(self.model).filter(actif=True)
878de341 38
39a63232
EMS
39 def get_sphinx_query_set(self):
40 return SiteSphinxQuerySet(self.model)
bae03b7b 41
39a63232
EMS
42 def filter_pays(self, pays):
43 return self.get_query_set().filter_pays(pays)
bae03b7b 44
01a9197e 45class Site(models.Model):
46 """Fiche d'info d'un site web"""
f810842d 47 url = models.URLField(verify_exists=False) # dc:identifier (dc:source?)
a5f76eb4 48 titre = models.CharField(max_length=255, verbose_name='titre') # dc.title
e7d36875 49 description = models.TextField(null=True, blank=True)
a5f76eb4
EMS
50 editeur = models.CharField(max_length=255, null=True, blank=True, verbose_name='éditeur') # dc.publisher : organisation resp
51 auteur = models.CharField(max_length=255, null=True, blank=True, verbose_name='auteur') # dc.creator : nom, prénom
03e081cb
AJ
52
53 #auf_partenaire = models.BooleanField() # dc.contributor
54
e7d36875
AJ
55 date_publication = models.DateField(null=True, blank=True) # dc.date : date de publication
56 type = models.CharField(max_length=2, null=True, blank=True, choices=TYPE_SITE_CHOICES,
01a9197e 57 verbose_name = 'Type de site') # dc.type
03e081cb
AJ
58 discipline = models.ManyToManyField(Discipline, blank=True)
59 thematique = models.ManyToManyField(Thematique, blank=True)
60
e7d36875 61 mots_cles = models.TextField(verbose_name='Mots-clés', null=True, blank=True) # dc:subject # indexation libre
01a9197e 62
63 # source # dc:source (dc:relation?)
a5f76eb4
EMS
64 pays = models.ForeignKey(Pays, null = True, blank=True, db_column='pays', to_field='code', verbose_name = 'pays')
65 regions = models.ManyToManyField(Region, blank=True, related_name="sites", verbose_name='régions')
01a9197e 66
67 # meta
41d30718 68 actif = models.BooleanField(default=True)
03e081cb 69 date_maj = models.DateField(auto_now=True)
fc2908e4 70 recherche_google = models.BooleanField('Inclure dans la recherche Google', default=False)
878de341
EMS
71
72 # Manager
73 objects = SiteManager()
c59dba82 74 all_objects = models.Manager()
6e001443 75
76 def __unicode__(self):
c08cba47 77 return "%s" % (self.titre)
54ab837c
AJ
78
79 def type_display(self):
80 for t in TYPE_SITE_CHOICES:
81 if self.type == t[0]:
82 return t[1]
83 return "-"
84
264a3210
EMS
85 def assigner_regions(self, regions):
86 self.regions.add(*regions)
87
88 def assigner_disciplines(self, disciplines):
89 self.discipline.add(*disciplines)