Intranet app

This commit is contained in:
alazo 2018-07-29 11:38:02 +02:00
parent cf3cf1748b
commit faef1e2caa
12 changed files with 125 additions and 27 deletions

View file

@ -86,7 +86,6 @@ class ConceptAdmin(admin.ModelAdmin):
class UploadAdmin(admin.ModelAdmin): class UploadAdmin(admin.ModelAdmin):
form = UploadAdminForm form = UploadAdminForm
admin.site.register(Enseignant) admin.site.register(Enseignant)
admin.site.register(Domaine, DomaineAdmin) admin.site.register(Domaine, DomaineAdmin)
admin.site.register(Competence, CompetenceAdmin) admin.site.register(Competence, CompetenceAdmin)

View file

@ -6,7 +6,6 @@ Created on 17 nov. 2012
from django.db import models from django.db import models
from django.utils.html import format_html from django.utils.html import format_html
from tinymce import models as tinymce_models from tinymce import models as tinymce_models
@ -178,17 +177,3 @@ class UploadDoc(models.Model):
def __str__(self): def __str__(self):
return self.titre return self.titre
class DocumentProf(models.Model):
doc = models.FileField(upload_to='docprof')
module = models.ForeignKey(Module, blank=False, on_delete=models.PROTECT)
title = models.CharField('titre', max_length=100, blank=False)
published = models.BooleanField(default=False)
class Meta:
verbose_name = 'DocProf'
def __str__(self):
return "{0} : {1}".format(self.module.code, self.title)

View file

@ -6,7 +6,6 @@ Created on 4 déc. 2012
import os import os
import tempfile import tempfile
from django.db.models import Sum from django.db.models import Sum
from django.http import HttpResponse from django.http import HttpResponse
from django.views.generic import ListView, TemplateView, DetailView from django.views.generic import ListView, TemplateView, DetailView

View file

@ -24,6 +24,7 @@ INSTALLED_APPS = [
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'tinymce', 'tinymce',
'cms', 'cms',
'intranet',
] ]
@ -123,5 +124,6 @@ TINYMCE_COMPRESSOR = True
PDF_FOOTER_TEXT = 'Ecole Santé-social Pierre-Coullery | Prévoyance 82 - 2300 La Chaux-de-Fonds | 032 886 33 00 | cifom-epc@rpn.ch' PDF_FOOTER_TEXT = 'Ecole Santé-social Pierre-Coullery | Prévoyance 82 - 2300 La Chaux-de-Fonds | 032 886 33 00 | cifom-epc@rpn.ch'
LOGIN_REDIRECT_URL = '/intranet/list/'
from .local_settings import * from .local_settings import *

View file

@ -2,15 +2,19 @@
""" """
import os import os
from django.urls import path, include
from django.contrib import admin
from django.conf import settings from django.conf import settings
from django.contrib import admin
from django.contrib.auth.views import LoginView, logout
from django.urls import path, include
from django.views.static import serve from django.views.static import serve
from cms import views from cms import views
urlpatterns = [ urlpatterns = [
path('', views.HomeView.as_view(), name='home'), path('', views.HomeView.as_view(), name='home'),
path('login/', LoginView.as_view(), name='login'),
path('logout/', logout, {'next_page': '/'}, name='logout'),
path('plan_pdf/', views.print_plan_formation, name='plan-pdf'), path('plan_pdf/', views.print_plan_formation, name='plan-pdf'),
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
path('domaine/<int:pk>/', views.DomaineDetailView.as_view(), name='domaine-detail'), path('domaine/<int:pk>/', views.DomaineDetailView.as_view(), name='domaine-detail'),
@ -28,8 +32,11 @@ urlpatterns = [
path('upload/', views.UploadDocListView.as_view(), name='uploaddoc-list'), path('upload/', views.UploadDocListView.as_view(), name='uploaddoc-list'),
path('concept/<int:pk>/', views.ConceptDetailView.as_view(), name='concept-detail'), path('concept/<int:pk>/', views.ConceptDetailView.as_view(), name='concept-detail'),
path('tinymce/', include('tinymce.urls'), name='tinymce-js'), path('tinymce/', include('tinymce.urls'), name='tinymce-js'),
path('intranet/', include('intranet.urls'), name='intranet'),
# Serve docs by Django to allow LoginRequiredMiddleware to apply # Serve docs by Django to allow LoginRequiredMiddleware to apply
path('media/intranet/<path:path>', serve,
{'document_root': os.path.join(settings.MEDIA_ROOT, 'intranet'), 'show_indexes': False}
),
path('media/doc/<path:path>', serve, path('media/doc/<path:path>', serve,
{'document_root': os.path.join(settings.MEDIA_ROOT, 'doc'), 'show_indexes': False} {'document_root': os.path.join(settings.MEDIA_ROOT, 'doc'), 'show_indexes': False}
), ),

View file

@ -0,0 +1,31 @@
# Generated by Django 2.0.6 on 2018-07-28 11:31
from django.db import migrations, models
import django.db.models.deletion
import intranet.models
class Migration(migrations.Migration):
initial = True
dependencies = [
('cms', '0009_drop_unneeded_defaults'),
]
operations = [
migrations.CreateModel(
name='IntranetDoc',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('doc', models.FileField(unique=True, upload_to='intranet')),
('published', models.BooleanField(default=True)),
('authorization', models.SmallIntegerField(choices=[(3, 'admin'), (0, 'aucun'), (1, 'étudiant'), (2, 'prof')], default=0, verbose_name='autorisation')),
('module', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='cms.Module')),
],
options={
'verbose_name': 'Intranet',
'verbose_name_plural': 'Intranet',
},
),
]

10
intranet/urls.py Normal file
View file

@ -0,0 +1,10 @@
"""eds URL Configuration
"""
from django.urls import path
from intranet import views
urlpatterns = [
path('list/', views.IntranetListView.as_view(), name='intranet-list'),
]

39
intranet/views.py Normal file
View file

@ -0,0 +1,39 @@
from django.conf import settings
from django.views.generic import ListView
from cms.models import Module
from intranet.models import IntranetDoc
from django.contrib.auth.mixins import LoginRequiredMixin
class IntranetListView(LoginRequiredMixin, ListView):
model = IntranetDoc
template_name = 'intranet/list.html'
login_url = '/login/'
redirect_field_name = 'redirecto_to'
def get_queryset(self):
modules = Module.objects.all().order_by('code')
groups = self.request.user.groups.values_list('name',flat=True)
if self.request.user.is_superuser:
return IntranetDoc.objects.filter(authorization__in=[1,2,3],
published=True)
if 'prof' in groups:
return IntranetDoc.objects.filter(authorization__in=[1,2],
published=True)
if 'Student_1_year' in groups or 'Student_2_year' in groups or 'Student_3_year' in groups:
modules_selected = []
student_access = {'Student_1_year': [m for m in modules if m.sem1 > 0 or m.sem2 > 0],
'Student_2_year': [m for m in modules if m.sem3 > 0 or m.sem4 > 0],
'Student_3_year': [m for m in modules if m.sem5 > 0 or m.sem6 > 0]
}
for group in groups:
for mod in student_access[group]: #settings.STUDENT_ACCESS[group]:
modules_selected.append(mod.code)
return IntranetDoc.objects.filter(module__code__in=modules_selected,
authorization=1,
published=True)
return None

View file

@ -9,9 +9,9 @@
<div id="user-tools"> <div id="user-tools">
{% if user.is_authenticated %} {% if user.is_authenticated %}
{% block welcome-msg %}Bienvenue <strong>{% firstof user.username %}</strong>.{% endblock %} {% block welcome-msg %}Bienvenue <strong>{% firstof user.username %}</strong>.{% endblock %}
<a href="{% url 'home' %}">Site public</a>&nbsp;&nbsp;<a href="{% url 'admin:index' %}">Admin</a> <a href="{% url 'logout' %}">Déconnexion</a>&nbsp;
{% else %} {% else %}
<a href="{% url 'admin:index' %}">Admin</a> <a href="{% url 'login' %}">Login</a>
{% endif %} {% endif %}
</div> </div>
{% endblock %} {% endblock %}
@ -29,8 +29,8 @@
<li><a href="{% url 'concept-detail' 1 %}">Concept pédagogique</a>&nbsp;&nbsp;</li> <li><a href="{% url 'concept-detail' 1 %}">Concept pédagogique</a>&nbsp;&nbsp;</li>
<li><a href="{% url 'concept-detail' 2 %}">Concept de formation</a>&nbsp;&nbsp;</li> <li><a href="{% url 'concept-detail' 2 %}">Concept de formation</a>&nbsp;&nbsp;</li>
<li><a href="{% url 'uploaddoc-list' %}">Téléchargements</a>&nbsp;&nbsp;</li> <li><a href="{% url 'uploaddoc-list' %}">Téléchargements</a>&nbsp;&nbsp;</li>
{% if has_permission %} {% if user.is_superuser %}
<li><a href="#">Calendrier</a>&nbsp;&nbsp;</li> <li><a href="{% url 'admin:index' %}">Administration</a></li>
{% endif %} {% endif %}
</ul> </ul>
</div> </div>

View file

@ -54,7 +54,7 @@
</tr> </tr>
<!-- Ligne 2 --> <!-- Ligne 2 -->
<tr> <tr>
<td rowspan="3" class="l2 d">{{ D2.url }}</td> <td rowspan="2" class="l2 d">{{ D2.url }}</td>
<td class="l2 p">{{ P03.url }}</td> <td class="l2 p">{{ P03.url }}</td>
<td class="l2 m">{{ M05.url_code }}</td> <td class="l2 m">{{ M05.url_code }}</td>
<td>&nbsp;</td> <td>&nbsp;</td>

View file

@ -85,7 +85,10 @@
<td>{{ object.processus.domaine.responsable.descr|safe }}</td> <td>{{ object.processus.domaine.responsable.descr|safe }}</td>
</tr> </tr>
</table> </table>
<p><a href="{% url 'module-pdf' object.id %}">Imprimer en PDF</a></p> <p>
<a href="{% url 'module-pdf' object.id %}">Imprimer en PDF</a>
&nbsp;&nbsp; &nbsp;<a href="{% url 'intranet-list' %}">Documents de cours (login requis)</a>
</p>
</div> </div>
{% endblock %} {% endblock %}

View file

@ -0,0 +1,23 @@
{% extends "../cms/base_site.html" %}
{% load i18n static %}
{% block content %}
<style type="text/css">
ul li {float: none;}
</style>
<div id="content-main">
<h1>Documents de cours</h1>
{% regroup object_list by module as module_list %}
<ul>
{% for module in module_list %}
<li><h3>{{ module.grouper }}</h3>
<ol>
{% for doc in module.list %}
<li><a href="{{ doc.doc.url }}">{{ doc.doc.name }} ({{ doc.get_authorization_display }})</a></li>
{% endfor %}
</ol>
</li>
{% endfor %}
</ul>
</div>
{% endblock %}