Merge branch 'master' of ssh://git.auf/auf_savoirs_en_partage_django
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / sitotheque / models.py
CommitLineData
01a9197e 1# -*- encoding: utf-8 -*-
2from django.db import models
878de341 3from django.db.models import Q
03e081cb
AJ
4from datamaster_modeles.models import *
5from savoirs.models import Discipline
01a9197e 6
7TYPE_SITE_CHOICES = (
8 ('RV', 'Revue en ligne'),
9 ('BB', 'Bibliothèque en ligne'),
00755d9b 10 ('FD', 'Fonds documentaire'),
01a9197e 11 ('AR', 'Archive ouverte'),
12 ('CO', 'Cours en ligne'),
00755d9b
AJ
13 ('RE', 'Repertoire de ressource'),
14 ('SA', 'Site associatif'),
15 ('SC', 'Site culturel'),
16 ('SI', 'Site d\'information'),
01a9197e 17 ('AU', 'Autre type de site'),
18 )
19
878de341
EMS
20class SiteManager(models.Manager):
21
22 def get_query_set(self):
23 return SiteQuerySet(self.model)
24
25 def search(self, text):
26 return self.get_query_set().search(text)
27
28class SiteQuerySet(models.query.QuerySet):
29
30 def search(self, text):
31 qs = self
0b1ddc11 32 q = None
878de341 33 for word in text.split():
0b1ddc11
EMS
34 part = (Q(titre__icontains=word) |
35 Q(description__icontains=word) |
36 Q(editeur__icontains=word) |
37 Q(auteur__icontains=word) |
38 Q(mots_cles__icontains=word) |
39 Q(discipline__nom__icontains=word) |
40 Q(pays__nom__icontains=word) |
41 Q(pays__region__nom__icontains=word))
42 if q is None:
43 q = part
44 else:
45 q = q & part
46 qs = qs.filter(q).distinct()
878de341
EMS
47 return qs
48
01a9197e 49class Site(models.Model):
50 """Fiche d'info d'un site web"""
f810842d 51 url = models.URLField(verify_exists=False) # dc:identifier (dc:source?)
03e081cb 52 titre = models.CharField(max_length=255, verbose_name='Titre') # dc.title
e7d36875
AJ
53 description = models.TextField(null=True, blank=True)
54 editeur = models.CharField(max_length=255, null=True, blank=True, verbose_name='Éditeur') # dc.publisher : organisation resp
55 auteur = models.CharField(max_length=255, null=True, blank=True, verbose_name='Auteur') # dc.creator : nom, prénom
03e081cb
AJ
56
57 #auf_partenaire = models.BooleanField() # dc.contributor
58
e7d36875
AJ
59 date_publication = models.DateField(null=True, blank=True) # dc.date : date de publication
60 type = models.CharField(max_length=2, null=True, blank=True, choices=TYPE_SITE_CHOICES,
01a9197e 61 verbose_name = 'Type de site') # dc.type
03e081cb
AJ
62 discipline = models.ManyToManyField(Discipline, blank=True)
63 thematique = models.ManyToManyField(Thematique, blank=True)
64
e7d36875 65 mots_cles = models.TextField(verbose_name='Mots-clés', null=True, blank=True) # dc:subject # indexation libre
01a9197e 66
67 # source # dc:source (dc:relation?)
e7d36875 68 pays = models.ForeignKey(Pays, null = True, blank=True, db_column='pays', to_field='code', verbose_name = 'Pays')
01a9197e 69
70 # meta
71 actif = models.BooleanField()
03e081cb 72 date_maj = models.DateField(auto_now=True)
878de341
EMS
73
74 # Manager
75 objects = SiteManager()
6e001443 76
77 def __unicode__(self):
c08cba47 78 return "%s" % (self.titre)
54ab837c
AJ
79
80 def type_display(self):
81 for t in TYPE_SITE_CHOICES:
82 if self.type == t[0]:
83 return t[1]
84 return "-"
85