Intranet app
This commit is contained in:
parent
cf3cf1748b
commit
faef1e2caa
12 changed files with 125 additions and 27 deletions
|
|
@ -85,8 +85,7 @@ 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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 *
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
),
|
),
|
||||||
|
|
|
||||||
31
intranet/migrations/0001_Add_Intranet_app.py
Normal file
31
intranet/migrations/0001_Add_Intranet_app.py
Normal 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
10
intranet/urls.py
Normal 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
39
intranet/views.py
Normal 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
|
||||||
|
|
@ -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> <a href="{% url 'admin:index' %}">Admin</a>
|
<a href="{% url 'logout' %}">Déconnexion</a>
|
||||||
{% 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> </li>
|
<li><a href="{% url 'concept-detail' 1 %}">Concept pédagogique</a> </li>
|
||||||
<li><a href="{% url 'concept-detail' 2 %}">Concept de formation</a> </li>
|
<li><a href="{% url 'concept-detail' 2 %}">Concept de formation</a> </li>
|
||||||
<li><a href="{% url 'uploaddoc-list' %}">Téléchargements</a> </li>
|
<li><a href="{% url 'uploaddoc-list' %}">Téléchargements</a> </li>
|
||||||
{% if has_permission %}
|
{% if user.is_superuser %}
|
||||||
<li><a href="#">Calendrier</a> </li>
|
<li><a href="{% url 'admin:index' %}">Administration</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -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> </td>
|
<td> </td>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
<a href="{% url 'intranet-list' %}">Documents de cours (login requis)</a>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
|
||||||
23
templates/intranet/list.html
Normal file
23
templates/intranet/list.html
Normal 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 %}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue