Commit bd5e6b03e40e17f39f4d90a6ee9164159914fdd5

Authored by fbormann
2 parents 0e57770f 59db94e7

Merge branch 'dev' of https://github.com/amadeusproject/amadeuslms into dev

amadeus/uploads/sistemas-de-informacao/algoritmo/topico-1/Riachuelo_Outubro.pdf 0 → 100644
No preview for this file type
app/templates/home.html
... ... @@ -80,8 +80,9 @@
80 80 <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li>
81 81 {% if user|has_role:'student' or not user.is_staff %}
82 82 <li><a href="{% url 'course:manage' %}">{% trans 'My courses' %}</a></li>
  83 + <li><a href="{% url 'course:all_courses' %}">{% trans 'All Courses' %}</a></li>
83 84 {% endif %}
84   - <li><a href="{% url 'core:guest' %}">{% trans 'All Courses' %}</a></li>
  85 + <li><a href="{% url 'core:guest' %}">{% trans 'Courses' %}</a></li>
85 86 {% if user|has_role:'system_admin' %}
86 87 <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li>
87 88 <li> <a href="{% url 'app:settings' %}">{% trans 'Settings' %}</a></li>
... ...
app/templates/home_student.html
... ... @@ -24,7 +24,7 @@
24 24 <ul class="nav nav-pills nav-stacked">
25 25 <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li>
26 26 <li><a href="{% url 'course:manage' %}">{% trans 'My Courses' %}</a></li>
27   - <li><a href="{% url 'core:guest' %}">{% trans 'All Courses' %}</a></li>
  27 + <li><a href="{% url 'course:all_courses' %}">{% trans 'All Courses' %}</a></li>
28 28 <li><a href="javascript:void(0)">{% trans 'Google accounts' %}</a></li>
29 29 </ul>
30 30 </div>
... ...
core/templates/base.html
... ... @@ -111,8 +111,9 @@
111 111 <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li>
112 112 {% if user|has_role:'student' or not user.is_staff %}
113 113 <li><a href="{% url 'course:manage' %}">{% trans 'My courses' %}</a></li>
114   - <li><a href="{% url 'core:guest' %}">{% trans 'All Courses' %}</a></li>
  114 + <li><a href="{% url 'core:all_courses' %}">{% trans 'All Courses' %}</a></li>
115 115 {% endif %}
  116 + <li><a href="{% url 'core:guest' %}">{% trans 'Courses' %}</a></li>
116 117 {% if user|has_role:'system_admin' %}
117 118 <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li>
118 119 {% endif %}
... ...
courses/static/js/course.js
... ... @@ -70,7 +70,7 @@ function delete_course(url, course, message, return_url) {
70 70 });
71 71 });
72 72 }
73   -/*
  73 +/*
74 74 *
75 75 * Function to load create course's form
76 76 *
... ...
courses/templates/course/course_card.html
... ... @@ -24,6 +24,10 @@
24 24 </ul>
25 25 </div>
26 26 </div>
  27 + {% elif user|has_role:'student' %}
  28 + {% if not request.user in course.students.all %}
  29 + <a onclick="subscribe($(this), '{% url 'course:subscribe' course.slug %}', {{ course.id}}, '{% trans 'Are you sure you want to subscribe to this course?' %}')"><button class="btn btn-sm btn-primary btn-raised pull-right">{% trans 'Subscribe' %}</button></a>
  30 + {% endif %}
27 31 {% endif %}
28 32 </div>
29 33 </div>
... ...
courses/templates/course/index.html
... ... @@ -21,8 +21,9 @@
21 21 <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li>
22 22 {% if user|has_role:'student' or not user.is_staff %}
23 23 <li><a href="{% url 'course:manage' %}">{% trans 'My courses' %}</a></li>
24   - <li><a href="{% url 'core:guest' %}">{% trans 'All Courses' %}</a></li>
  24 + <li><a href="{% url 'course:all_courses' %}">{% trans 'All Courses' %}</a></li>
25 25 {% endif %}
  26 + <li><a href="{% url 'core:guest' %}">{% trans 'Courses' %}</a></li>
26 27 {% if user|has_role:'system_admin' %}
27 28 <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li>
28 29 {% endif %}
... ... @@ -43,18 +44,41 @@
43 44 </div>
44 45  
45 46 {% if user|has_role:'professor' or user|has_role:'system_admin' %}
46   - <div class="panel panel-primary">
47   - <div class="panel-heading">
48   - <h3 class="panel-title">{% trans 'Category' %}</h3>
  47 + <div class="panel panel-primary">
  48 + <div class="panel-heading">
  49 + <h3 class="panel-title">{% trans 'Category' %}</h3>
  50 + </div>
  51 + <div class="panel-body">
  52 + <ul class="nav nav-pills nav-stacked">
  53 + <li><a href="{% url 'course:create_cat' %}">{% trans 'Create Category' %}</a></li>
  54 + <li><a href="{% url 'course:manage_cat' %}">{% trans 'List Category' %}</a></li>
  55 + </ul>
  56 + </div>
49 57 </div>
50   - <div class="panel-body">
51   - <ul class="nav nav-pills nav-stacked">
52   - <li><a href="{% url 'course:create_cat' %}">{% trans 'Create Category' %}</a></li>
53   - <li><a href="{% url 'course:manage_cat' %}">{% trans 'List Category' %}</a></li>
54   - </ul>
  58 + {% endif %}
  59 + <div class="panel-group" id="accordion">
  60 + <div class="panel panel-primary">
  61 + <div class="panel-heading">
  62 + <h4 class="panel-title">
  63 + <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
  64 + </span>{% trans 'Categorys' %}</a>
  65 + </h4>
  66 + </div>
  67 + <div id="collapseOne" class="panel-collapse collapse in">
  68 + <div class="panel-body">
  69 + <table class="table">
  70 + {% for category in categorys_courses %}
  71 + <tr>
  72 + <td>
  73 + <a href="?category={{category.name}}">{{category.name}}</a>
  74 + </td>
  75 + </tr>
  76 + {% endfor %}
  77 + </table>
  78 + </div>
  79 + </div>
  80 + </div>
55 81 </div>
56   - </div>
57   - {% endif %}
58 82  
59 83 {% endblock %}
60 84  
... ... @@ -84,7 +108,6 @@
84 108 </form>
85 109 </div>
86 110  
87   -
88 111 </fieldset>
89 112 <div class="col-md-12 cards-content">
90 113 {% if courses|length > 0 %}
... ...
courses/templates/subject/form_view_student.html
... ... @@ -32,14 +32,32 @@
32 32 </p>
33 33  
34 34 </div>
  35 + <div class="row">
  36 + <div class="col-xs-6 col-md-6">
  37 + <div class="resource_inline">
  38 + <h4>{% trans 'Material' %}</h4>
  39 + </div>
  40 + <ul>
  41 + {% list_topic_file request topic %}
  42 + {% list_topic_link request topic%}
  43 + </ul>
  44 + </div>
  45 + <div class="col-xs-4 col-md-4">
  46 + <div class="resource_inline">
  47 + <h4>{% trans 'Activities' %}</h4>
  48 + </div>
  49 + <ul>
  50 + {% list_topic_poll request topic %}
  51 + {% list_topic_foruns request topic %}
  52 + </ul>
  53 + </div>
  54 + </div>
35 55 </div>
36 56 </div>
37 57 </div>
38   -
39 58 </div>
40   -
41 59 {% professor_subject topic.subject user as professor_links %}
42   - {% if professor_links%}
  60 + {% if professor_links %}
43 61 {% include "links/create_link.html" %}
44 62 {% include "links/delete_link.html" %}
45 63 {% endif %}
... ...
courses/templates/topic/file_material_view.html 0 → 100644
... ... @@ -0,0 +1,110 @@
  1 +{% extends 'subject/index.html' %}
  2 +
  3 +{% load static i18n permission_tags widget_tweaks %}
  4 +
  5 +{% block breadcrumbs %}
  6 +
  7 + <ol class="breadcrumb">
  8 + <li><a href="">{% trans 'Home' %}</a></li>
  9 + <li><a href="">{{ subject }}</a></li>
  10 + <li class="active">{% trans 'Manage Topic' %}</li>
  11 + <li class="active">{{ topic.name }}</li>
  12 + </ol>
  13 +{% endblock %}
  14 +
  15 +
  16 +{% block content %}
  17 +
  18 +<div class="col-md-12">
  19 + <div><div class="well">
  20 + <div class="row">
  21 + <div class="col-md-offset-2 col-md-9">
  22 + <h2 class="resource_inline"><b>Book 1</b></h2>
  23 + </div>
  24 + <div class="col-md-offset-2 col-md-8">
  25 + <a href="{{ file.file_url }}">{{ file.url }}</a>
  26 + </div>
  27 + </div>
  28 +</div></div>
  29 + <div><div class="well">
  30 + <div class="row">
  31 + <div class="list-group">
  32 + <div class="list-group-item">
  33 + <div class="form-group is-empty">
  34 + <div class="row">
  35 + <div class="col-md-1">
  36 + <span class="input-group-btn">
  37 + <button type="button" class="btn btn-fab btn-fab-mini">
  38 + <i class="material-icons">send</i>
  39 + </button>
  40 + </span>
  41 + </div>
  42 + <div class="col-md-10">
  43 + <input type="text" id="addon3a" class="form-control" placeholder="Add Comment">
  44 + </div>
  45 + </div>
  46 + </div>
  47 + </div>
  48 + </div>
  49 + </div>
  50 +</div>
  51 +<div class="well timeLine">
  52 + <div class="row">
  53 + <div class="col-xs-2 col-md-1">
  54 + <img class="imgTimeLine" src="http://localhost:8080/assets/img/images/team-avatar-2.jpg">
  55 + </div>
  56 + <div class="col-xs-10 col-md-11">
  57 + <i class="fa fa-flag-o" aria-hidden="true"></i>
  58 + <a href="#"><h4 class="resource_inline"><b>Beltrano Camargo</b></h4></a>
  59 + <p class="timePost"><i>Há 11 horas</i></p>
  60 + <!--ListComents -->
  61 + <div class="list-group">
  62 + <div class="list-group-item">
  63 + <div class="row-picture">
  64 + <img class="circle" src="http://localhost:8080/assets/img/images/team-avatar-1.jpg" alt="icon">
  65 + </div>
  66 + <div class="row-content">
  67 + <h4 class="list-group-item-heading">Sicrano da Silva</h4>
  68 + <div class="least-content">11 horas</div>
  69 +
  70 + <p class="list-group-item-text">Quais capítulos devo estudar?</p>
  71 + </div>
  72 + </div>
  73 + <div class="list-group-separator"></div>
  74 + <div class="list-group-item">
  75 + <div class="row-picture">
  76 + <img class="circle" src="http://localhost:8080/assets/img/images/team-avatar-2.jpg" alt="icon">
  77 + </div>
  78 + <div class="row-content">
  79 + <h4 class="list-group-item-heading">Beltrano Camargo</h4>
  80 + <div class="least-content">11 horas</div>
  81 +
  82 + <p class="list-group-item-text">capítulos 5 e 6</p>
  83 + </div>
  84 + </div>
  85 + <div class="list-group-separator"></div>
  86 + <div class="list-group">
  87 + <div class="list-group-item">
  88 + <div class="form-group is-empty">
  89 + <div class="row">
  90 + <div class="col-md-1 col-md-offset-1">
  91 + <span class="input-group-btn">
  92 + <button type="button" class="btn btn-fab btn-fab-mini">
  93 + <i class="material-icons">send</i>
  94 + </button>
  95 + </span>
  96 + </div>
  97 + <div class="col-md-10">
  98 + <input type="text" id="addon3a" class="form-control" placeholder="Add Comment">
  99 + </div>
  100 + </div>
  101 + </div>
  102 + </div>
  103 + </div>
  104 + </div>
  105 + <!-- endListComents -->
  106 + </div>
  107 + </div>
  108 +</div></div>
  109 + </div>
  110 +{% endblock %}
0 111 \ No newline at end of file
... ...
courses/templates/topic/list_file.html
... ... @@ -2,7 +2,7 @@
2 2  
3 3 <div id="list-topic{{ topic.id }}-files">
4 4 {% for file in files %}
5   - <li id="file_{{ file.slug }}"><i class="material-icons">{{ file.file_type.icon }}</i> <a href="{{ file.file_url.url }}" target="_blank">{{ file.name }}</a></li>
  5 + <li id="file_{{ file.slug }}"><i class="material-icons">{{ file.file_type.icon }}</i> <a href="{% url 'course:file_material_view' file.slug %}" target="_blank">{{ file.name }}</a></li>
6 6 {% endfor %}
7 7 </div>
8 8  
... ...
courses/urls.py
... ... @@ -3,6 +3,7 @@ from django.conf.urls import url, include
3 3 from . import views
4 4 urlpatterns = [
5 5 url(r'^$', views.IndexView.as_view(), name='manage'),
  6 + url(r'^all-courses/$', views.AllCoursesView.as_view(), name='all_courses'),
6 7 url(r'^create/$', views.CreateCourseView.as_view(), name='create'),
7 8 url(r'^replicate_course/(?P<slug>[\w_-]+)/$', views.ReplicateCourseView.as_view(), name='replicate_course'),
8 9 url(r'^edit/(?P<slug>[\w_-]+)/$', views.UpdateCourseView.as_view(), name='update'),
... ... @@ -27,6 +28,7 @@ urlpatterns = [
27 28 url(r'^exam/', include('exam.urls', namespace = 'exam')),
28 29 url(r'^files/', include('files.urls', namespace = 'file')),
29 30 url(r'^upload-material/$', views.UploadMaterialView.as_view(), name='upload_material'),
  31 + url(r'^subjects/file-material-view/(?P<slug>[\w_-]+)/$', views.FileMaterialView.as_view(), name='file_material_view'),
30 32 url(r'^links/',include('links.urls',namespace = 'links')),
31 33 url(r'^(?P<slug>[\w_-]+)/', include([
32 34 url(r'^$', views.CourseView.as_view(), name='view'),
... ...
courses/views.py
... ... @@ -13,7 +13,6 @@ import operator
13 13 from functools import reduce
14 14 from rolepermissions.verifications import has_object_permission
15 15 from django.http import HttpResponseRedirect, JsonResponse
16   -
17 16 from .forms import CourseForm, UpdateCourseForm, CategoryCourseForm, SubjectForm,TopicForm,ActivityForm
18 17 from .models import Course, Subject, CourseCategory,Topic, SubjectCategory,Activity, CategorySubject
19 18 from core.mixins import NotificationMixin
... ... @@ -32,7 +31,7 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView):
32 31 queryset = Course.objects.all()
33 32 template_name = 'course/index.html'
34 33 context_object_name = 'courses'
35   - paginate_by = 5
  34 + paginate_by = 10
36 35 aparece = True
37 36  
38 37  
... ... @@ -67,7 +66,7 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView):
67 66 elif has_role(self.request.user,'system_admin'):
68 67 list_courses = queryset.order_by('name')
69 68 categorys_courses = CourseCategory.objects.all()
70   - else:
  69 + elif has_role(self.request.user, 'student'):
71 70 list_courses = Course.objects.filter(Q(students = True)|Q(students__name = self.request.user.name)).order_by('name')
72 71 categorys_courses = CourseCategory.objects.filter(course_category__students__name = self.request.user.name).distinct()
73 72  
... ... @@ -86,6 +85,61 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView):
86 85 context['aparece'] = self.aparece
87 86  
88 87 return context
  88 +
  89 +class AllCoursesView(LoginRequiredMixin, NotificationMixin, generic.ListView):
  90 +
  91 + login_url = reverse_lazy("core:home")
  92 + redirect_field_name = 'next'
  93 + queryset = Course.objects.all()
  94 + template_name = 'course/index.html'
  95 + context_object_name = 'courses'
  96 + paginate_by = 5
  97 + aparece = True
  98 +
  99 +
  100 + def get_queryset(self):
  101 + result = super(AllCoursesView, self).get_queryset()
  102 +
  103 + course_search = self.request.GET.get('q', None)
  104 + category_search = self.request.GET.get('category', None)
  105 + if course_search:
  106 + self.aparece = False
  107 + query_list = course_search.split()
  108 + result = result.filter(
  109 + reduce(operator.and_,
  110 + (Q(name__icontains=q) for q in query_list))
  111 + )
  112 + if category_search:
  113 + self.aparece = False
  114 + query_list = category_search.split()
  115 + result = result.filter(
  116 + reduce(operator.and_,
  117 + (Q(category__name=category) for category in query_list))
  118 + )
  119 + return result
  120 +
  121 + def get_context_data(self, **kwargs):
  122 + context = super(AllCoursesView, self).get_context_data(**kwargs)
  123 + list_courses = None
  124 + categorys_courses = None
  125 + list_courses = Course.objects.all().order_by('name')
  126 + categorys_courses = CourseCategory.objects.all().distinct().order_by('name')
  127 +
  128 + paginator = Paginator(list_courses, self.paginate_by)
  129 + page = self.request.GET.get('page')
  130 +
  131 + try:
  132 + list_courses = paginator.page(page)
  133 + except PageNotAnInteger:
  134 + list_courses = paginator.page(1)
  135 + except EmptyPage:
  136 + list_courses = paginator.page(paginator.num_pages)
  137 +
  138 + context['list_courses'] = list_courses
  139 + context['categorys_courses'] = categorys_courses
  140 + context['aparece'] = self.aparece
  141 +
  142 + return context
89 143  
90 144 class CreateCourseView(LoginRequiredMixin, HasRoleMixin, NotificationMixin,generic.edit.CreateView):
91 145  
... ... @@ -658,3 +712,12 @@ class IndexSubjectCategoryView(LoginRequiredMixin, generic.ListView):
658 712 context = super(IndexSubjectCategoryView, self).get_context_data(**kwargs)
659 713 context['subject_categories'] = SubjectCategory.objects.all()
660 714 return context
  715 +
  716 +class FileMaterialView(LoginRequiredMixin, generic.DetailView):
  717 +
  718 + allowed_roles = ['professor', 'system_admin', 'student']
  719 + login_url = reverse_lazy("core:home")
  720 + redirect_field_name = 'next'
  721 + model = Material
  722 + context_object_name = 'file'
  723 + template_name = 'topic/file_material_view.html'
661 724 \ No newline at end of file
... ...