models.py 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. from django.db import models
  2. from django import forms
  3. from django.template.defaultfilters import slugify
  4. from trumbowyg.widgets import TrumbowygWidget
  5. menu_pos = (
  6. (u'no', u'No'),
  7. (u'haut', u'En haut'),
  8. (u'cote', u'Sur le coté'),
  9. (u'pied', u'En pied de page'),
  10. )
  11. page_type = (
  12. (u'page', u'Une page'),
  13. (u'sys', u'Une page interne'),
  14. (u'lien', u'Un lien'),
  15. (u'lien_ext', u'Un lien Externe'),
  16. )
  17. page_color = (
  18. (u'primary', u'Bleu'),
  19. (u'secondary', u'Gris'),
  20. (u'success', u'Vert'),
  21. (u'danger', u'Rouge'),
  22. (u'warning', u'Orange'),
  23. (u'info', u'Bleu clair'),
  24. (u'dark', u'Noir'),
  25. (u'white', u'Blanc'),
  26. )
  27. page_bordure = (
  28. (u'def', u'Default'),
  29. (u'oui', u'Oui'),
  30. (u'non', u'Non'),
  31. )
  32. class Groupe (models.Model) : #group pour organisation
  33. g_nom = models.CharField("Nom du groupe", max_length = 128, unique = True)
  34. g_nom_slugify = models.CharField("Nom Slugify", max_length = 128, blank = True, editable = False)
  35. g_description = models.TextField("Description", blank = True)
  36. class Meta :
  37. verbose_name = 'Groupe'
  38. verbose_name_plural = 'Groupes'
  39. def save(self, *args, **kwargs) :
  40. self.g_nom_slugify = slugify(self.g_nom)
  41. super(Groupe, self).save(*args, **kwargs)
  42. def __unicode__(self):
  43. return self.g_nom
  44. def __str__(self):
  45. return '%s' % (self.g_nom)
  46. class Data (models.Model) : #stocage de donnée dynamique
  47. d_titre = models.CharField("Nom", max_length = 128, unique = True)
  48. d_titre_slugify = models.CharField("Nom Slugify", max_length = 128, blank = True, editable = False)
  49. d_type = models.CharField("Type", max_length = 64)
  50. d_variable = models.CharField("Valeur", max_length = 64)
  51. class Meta :
  52. verbose_name = 'Stocage de données'
  53. verbose_name_plural = 'Stocage de données'
  54. ordering = ['d_titre']
  55. def save(self, *args, **kwargs) :
  56. self.d_titre_slugify = slugify(self.d_titre)
  57. super(Data, self).save(*args, **kwargs)
  58. def __unicode__(self):
  59. return self.d_titre
  60. def __str__(self):
  61. return '%s' % (self.d_titre)
  62. class Fichier (models.Model) : # Upload de fichier pour réutilisation dans les pages
  63. f_nom = models.CharField("Nom du fichier", max_length = 128, blank = True, editable = False)
  64. f_date = models.DateTimeField("Date", auto_now_add=True)
  65. f_fichier = models.FileField("Fichier", upload_to='static/uploads/')
  66. class Meta :
  67. verbose_name = 'Stocage de fichiers'
  68. verbose_name_plural = 'Stocage de fichiers'
  69. ordering = ['f_date']
  70. def save(self, *args, **kwargs) :
  71. self.f_nom = slugify(self.f_fichier.name)
  72. super(Fichier, self).save(*args, **kwargs)
  73. def __unicode__(self):
  74. return self.f_nom
  75. def __str__(self):
  76. return '%s' % (self.f_nom)
  77. class Page (models.Model) : #Architecture pour les pages static est dynamique
  78. p_titre = models.CharField("Titre", max_length = 128, unique = True)
  79. p_titre_slugify = models.CharField("Titre Slugify", max_length = 128, blank = True, editable = False)
  80. p_icone = models.CharField("Code de l'icone", max_length = 64, blank = True)
  81. p_type = models.CharField("Type de page",choices=page_type, max_length=8, default='page')
  82. p_adresse = models.CharField("Adresse", max_length = 64)
  83. p_menu_position = models.CharField("A utiliser dans un menu ?",choices=menu_pos, max_length=4, default='no')
  84. p_menu_est_parent = models.BooleanField("Utilisé comme parent", default = False)
  85. p_menu_parent = models.ForeignKey('self',verbose_name="Parent", blank = True, null = True, on_delete=models.PROTECT, limit_choices_to={'p_menu_est_parent': True})
  86. p_menu_poid = models.PositiveSmallIntegerField("Poid si utilisé dans les menus", default=50)
  87. p_mots_clefs = models.CharField("Mots clefs", max_length = 512, blank = True)
  88. p_description = models.TextField("Description", blank = True)
  89. p_contenu = models.TextField("Contenu", blank = True)
  90. p_right = models.TextField("Contenu à droite", blank = True)
  91. p_groupe = models.BooleanField("Afficher les groupes", default = False)
  92. p_speedial = models.BooleanField("Afficher le Speedial", default = False)
  93. p_publier = models.BooleanField("Publié", default = False)
  94. p_proteger = models.BooleanField("Disponible que si authentifier", default = False)
  95. p_see_title_and_des_in_templates = models.BooleanField("Description et titre visible dans les templates", default = True)
  96. c_card_mp = models.CharField("Afficage du cadre central",choices=page_bordure, max_length=3, default='def')
  97. c_card_rp = models.CharField("Afficage du cadre de droite",choices=page_bordure, max_length=3, default='def')
  98. class Meta :
  99. verbose_name = 'Gestion des pages'
  100. verbose_name_plural = 'Gestion des pages'
  101. ordering = ['p_adresse']
  102. def save(self, *args, **kwargs) :
  103. if self.p_type == "sys" and self.p_titre_slugify == "":
  104. self.p_titre_slugify = slugify(self.p_titre)
  105. elif self.p_type != "sys":
  106. self.p_titre_slugify = slugify(self.p_titre)
  107. if self.p_type == "lien":
  108. self.p_description = "."
  109. self.p_contenu = "."
  110. super(Page, self).save(*args, **kwargs)
  111. def __unicode__(self):
  112. return self.p_titre
  113. def __str__(self):
  114. return '%s' % (self.p_titre)
  115. class Speed_Dial (models.Model) : # model pour génération de page SpeedDial
  116. sd_titre = models.CharField("Titre", max_length = 128)
  117. sd_groupe = models.ForeignKey(Groupe,verbose_name="Groupe", blank = True, null = True, on_delete=models.PROTECT)
  118. sd_icone = models.CharField("Code de l'icone", max_length = 64, blank = True)
  119. sd_color = models.CharField("Couleur du cadre",choices=page_color, max_length=10, default='primary')
  120. sd_adresse = models.CharField("Adresse", max_length = 256)
  121. sd_poid = models.PositiveSmallIntegerField("Poid", default=50)
  122. def __str__(self):
  123. return self.sd_titre
  124. class Meta:
  125. verbose_name = "Speed Dial"
  126. verbose_name_plural = "Speed Dial"
  127. class Contact (models.Model): # model de contact et retour de bug
  128. c_type_liste = (
  129. ('contact', 'Pour un contact'),
  130. ('beug', 'Pour un beug'),
  131. ('plainte', 'Pour une plainte'),
  132. )
  133. c_statut_liste = (
  134. ('non_lu', 'Non Lu'),
  135. ('lu', 'Lu'),
  136. ('archive', 'Archivé'),
  137. )
  138. c_name = models.CharField("Votre nom", max_length = 128)
  139. c_email = models.EmailField("Votre emails")
  140. c_type = models.CharField("Type de demande", max_length=16, choices=c_type_liste, default = 'contact')
  141. c_description = models.TextField("Votre demande")
  142. c_statut = models.CharField("Statut de la demande", max_length=16, choices=c_statut_liste, default = 'non_lu')
  143. def __unicode__(self):
  144. return self.c_name
  145. def __str__(self):
  146. return '%s' % (self.c_name)
  147. class ContactForm(forms.ModelForm):# formulaire de contact lié au model
  148. class Meta:
  149. model = Contact
  150. fields = ['c_name', 'c_email', 'c_type', 'c_description']
  151. class Page_Admin_Form(forms.ModelForm):
  152. class Meta:
  153. model = Page
  154. exclude = ['p_titre_slugify']
  155. widgets = {
  156. 'p_contenu': TrumbowygWidget(),
  157. 'p_right': TrumbowygWidget(),
  158. }