Commit e4873697bb9876d1b01e2fab05f37197eaaade60

Authored by Matheus Lins
2 parents 545ee28d e4bff4ea

conflit

app/templates/home.html
... ... @@ -78,26 +78,27 @@
78 78 </div>
79 79 <div class="panel-body">
80 80 <ul class="nav nav-pills nav-stacked">
81   - {% if user|has_role:'student' or not user.is_staff %}
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>
84   - {% endif %}
  81 + <li>
  82 + <a href="#menu_courses" class="accordion" data-toggle="collapse">{% trans 'Courses' %}<span class="pull-right glyphicon glyphicon-chevron-down"></span></a>
  83 + <div id="menu_courses" class="collapse">
  84 + <ul class="nav nav-pill nav-stacked accordion_list">
  85 + <li><a href="{% url 'course:manage' %}">{% trans 'My courses' %}</a></li>
  86 + <li><a href="{% url 'course:all_courses' %}">{% trans 'All Courses' %}</a></li>
  87 + {% if user|has_role:'system_admin' or user|has_role:'professor'%}
  88 + <li><a href="{% url 'course:manage_cat' %}">{% trans 'List Category' %}</a></li>
  89 + <li><a href="{% url 'course:create' %}">{% trans 'Create Course' %}</a></li>
  90 + <li><a href="{% url 'course:create_cat' %}">{% trans 'Create Category' %}</a></li>
  91 + {% endif %}
  92 + </ul>
  93 + </div>
  94 + </li>
  95 + {% block menu %}
  96 +
  97 + {% endblock %}
85 98 {% if user|has_role:'system_admin' %}
86 99 <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li>
87 100 <li> <a href="{% url 'app:settings' %}">{% trans 'Settings' %}</a></li>
88 101 {% endif %}
89   - {% if user|has_role:'system_admin' or user|has_role:'professor' %}
90   - <li>
91   - <a href="#courses_list" class="accordion" data-toggle="collapse">{% trans 'Manage Courses' %}</a>
92   - <div id="courses_list" class="collapse">
93   - <ul class="nav nav-pill nav-stacked accordion_list">
94   - {% for course in courses_list %}
95   - <li><a href="{% url 'course:view' course.slug %}">{{ course }}</a></li>
96   - {% endfor %}
97   - </ul>
98   - </div>
99   - </li>
100   - {% endif %}
101 102 </ul>
102 103 </div>
103 104 </div>
... ...
core/migrations/0004_auto_20161110_1215.py 0 → 100644
... ... @@ -0,0 +1,21 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10 on 2016-11-10 15:15
  3 +from __future__ import unicode_literals
  4 +
  5 +import django.contrib.postgres.fields.jsonb
  6 +from django.db import migrations
  7 +
  8 +
  9 +class Migration(migrations.Migration):
  10 +
  11 + dependencies = [
  12 + ('core', '0003_auto_20161101_1457'),
  13 + ]
  14 +
  15 + operations = [
  16 + migrations.AlterField(
  17 + model_name='log',
  18 + name='context',
  19 + field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, verbose_name='Context'),
  20 + ),
  21 + ]
... ...
core/templates/base.html
... ... @@ -8,9 +8,9 @@
8 8 <head>
9 9 <title>{{ title }}</title>
10 10  
11   - <!-- jQuery & jQuery UI -->
12   - <script type="text/javascript" src="{% static 'js/vendor/jquery-3.1.0.min.js' %}"></script>
13   - <script type="text/javascript" src="{% static 'js/vendor/jquery-ui.js' %}"></script>
  11 + <!-- jQuery & jQuery UI -->
  12 + <script type="text/javascript" src="{% static 'js/vendor/jquery-3.1.0.min.js' %}"></script>
  13 + <script type="text/javascript" src="{% static 'js/vendor/jquery-ui.js' %}"></script>
14 14  
15 15 <meta http-equiv="Cache-Control" content="no-cache, no-store" />
16 16 <link href="{% static 'img/topo-amadeus.png' %}" rel="shortcut icon" />
... ... @@ -30,9 +30,7 @@
30 30 <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/alertifyjs/themes/bootstrap.css' %}">
31 31 <script type="text/javascript" src="{% static 'bootstrap-3.3.7/js/bootstrap.js' %}"></script>
32 32 <script type="text/javascript" src="{% static 'js/vendor/bootstrap-acessibility.min.js' %}"></script>
33   - <script type="text/javascript" src="{% static 'material/js/material.js' %}"></script>
34 33 <script type="text/javascript" src="{% static 'material/js/material.min.js' %}"></script>
35   - <script type="text/javascript" src="{% static 'material/js/ripples.js' %}"></script>
36 34 <script type="text/javascript" src="{% static 'material/js/ripples.min.js' %}"></script>
37 35 <script type="text/javascript" src="{% static 'js/vendor/bootstrap-datepicker.js' %}"></script>
38 36 {% with "js/vendor/locales/bootstrap-datepicker."|add:LANGUAGE_CODE|add:".js" as locale_datepicker %}
... ... @@ -62,84 +60,88 @@
62 60  
63 61 </head>
64 62 <body>
65   - {% block nav %}
66   - <div class="navbar navbar-default">
67   - <div class="navbar-header">
68   - <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse">
69   - <span class="icon-bar"></span>
70   - <span class="icon-bar"></span>
71   - <span class="icon-bar"></span>
72   - </button>
73   - <a class="navbar-brand" href="{% url 'app:index' %}"><img class="logo" src="{% static 'img/topo-amadeus-white.png' %}" alt="Logo"/></a>
74   - </div>
75   - <div class="navbar-collapse collapse navbar-responsive-collapse">
76   - <div class="col-md-5 cards-content" id= 'NavBarSearch'>
77   - <form id="SearchForm" action="{% url 'users:search' %}" method="get" accept-charset="utf-8">
78   - <div class="input-group">
79   - <div class="form-group is-empty" >
80   - <input type="text" class="form-control" placeholder="{% trans 'Search Files (.pdf, others) and/or activities' %}" name="search">
81   - </div>
82   - <span class="input-group-btn input-group-sm">
83   - <button type="submit" class="btn btn-primary" id="btn-search">
84   - <i class="fa fa-search fa-2x" aria-hidden="true" style="color:#93C741"></i>
85   - </button>
86   - </span>
87   -
88   -
89   - </div>
90   - </form>
91   - </div>
92   -
93   - <ul class="nav navbar-nav navbar-right notifications">
94   - <li class="" data-toggle="tooltip" data-placement="bottom" title data-original-title="notifications">
95   - <a class="dropdown-toggle" data-toggle="dropdown"> <span id="notification-count" class="badge notification-count">{{notifications.count}}</span><i class="fa fa-bell" aria-hidden="true"></i></a>
96   - <ul id="notification-dropdown" class="dropdown-menu">
97   - <li class="dropdown-header"> {% trans 'Notifications' %}</li>
98   - {% include "notifications.html" %}
99   -
100   - <li>
101   - <a onclick="getNotifications(5)">
102   - <div id="notification-see-more" class="list-group-item">
103   - <div class="row-content">
104   - <p class="list-group-item-text">{% trans 'See More' %}</p>
105   - </div>
106   - </a>
107   - </li>
108   - </ul>
109   - </li>
110   -
111   - <li data-toggle="tooltip" data-placement="bottom" title data-original-title="{% trans 'messages' %}"> <a href="#"><i class="fa fa-comments" aria-hidden="true"></i></a> </li>
112   - <li > <a class="link" href="{% url 'users:profile' %}">{{ user }}</a></li>
113   - <li data-toggle="tooltip" data-placement="bottom" title data-original-title="log out"> <a href="{% url 'core:logout' %}"><i class="fa fa-sign-out" aria-hidden="true"></i></a></li>
114   - </ul>
115   - </div>
116   - </div>
117   - {% endblock %}
118   - <div class="container-fluid">
119   - <div class="row">
120   - <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2 col-xl-2">
121   - {% block sidebar %}
122   - {% endblock %}
123   - </div>
124   - <div class="col-xs-10 col-sm-10 col-md-10 col-lg-10 col-xl-10">
125   - {% block breadcrumbs %}{% endblock %}
126   - {% block render_breadcrumbs %}{% endblock %}
127   - </div>
128   - <div class="col-xs-10 col-sm-10 col-md-10 col-lg-10 col-xl-10">
129   - {% block content %}{% endblock %}
130   - </div>
131   - </div>
132   - </div>
133   -
134   - {% block script_file %}
135   -
136   - {% endblock script_file %}
137   -
138   - {% block script_link %}
139   -
140   - {% endblock script_link %}
141   - <!-- Init material Bootstrap -->
142   - <script type="text/javascript">$.material.init()</script>
  63 + {% block nav %}
  64 + <div class="navbar navbar-default">
  65 + <div class="navbar-header">
  66 + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse">
  67 + <span class="icon-bar"></span>
  68 + <span class="icon-bar"></span>
  69 + <span class="icon-bar"></span>
  70 + </button>
  71 + <a class="navbar-brand" href="{% url 'app:index' %}"><img class="logo" src="{% static 'img/topo-amadeus-white.png' %}" alt="Logo"/></a>
  72 + </div>
  73 + <div class="navbar-collapse collapse navbar-responsive-collapse">
  74 + <div class="col-md-5 cards-content" id= 'NavBarSearch'>
  75 + <form id="SearchForm" action="{% url 'users:search' %}" method="get" accept-charset="utf-8">
  76 + <div class="input-group">
  77 + <div class="form-group is-empty" >
  78 + <input type="text" class="form-control" placeholder="{% trans 'Search Files (.pdf, others) and/or activities' %}" name="search">
  79 + </div>
  80 + <span class="input-group-btn input-group-sm">
  81 + <button type="submit" class="btn btn-primary" id="btn-search">
  82 + <i class="fa fa-search fa-2x" aria-hidden="true" style="color:#93C741"></i>
  83 + </button>
  84 + </span>
  85 + </div>
  86 + </form>
  87 + </div>
  88 + <ul class="nav navbar-nav navbar-right notifications">
  89 + <li class="" data-toggle="tooltip" data-placement="bottom" title data-original-title="notifications">
  90 + <a class="dropdown-toggle" data-toggle="dropdown"> <span id="notification-count" class="badge notification-count">{{notifications.count}}</span><i class="fa fa-bell" aria-hidden="true"></i></a>
  91 + <ul id="notification-dropdown" class="dropdown-menu">
  92 + <li class="dropdown-header"> {% trans 'Notifications' %}</li>
  93 + {% include "notifications.html" %}
  94 + <li>
  95 + <a onclick="getNotifications(5)">
  96 + <div id="notification-see-more" class="list-group-item">
  97 + <div class="row-content">
  98 + <p class="list-group-item-text">{% trans 'See More' %}</p>
  99 + </div>
  100 + </div>
  101 + </a>
  102 + </li>
  103 + </ul>
  104 + </li>
  105 + <li data-toggle="tooltip" data-placement="bottom" title data-original-title="{% trans 'messages' %}"> <a href="#"><i class="fa fa-comments" aria-hidden="true"></i></a> </li>
  106 + <li>
  107 + <a href="" data-toggle="dropdown">{{ user }}</a>
  108 + <ul class="dropdown-menu pull-right">
  109 + <li><a href="{% url 'users:profile' %}">{% trans 'Perfil' %}</a></li>
  110 + <li><a href="{% url 'users:update_profile' %}">{% trans 'Edit Profile' %}</a></li>
  111 + <li><a href="{% url 'users:change_password' %}">{% trans 'Change password' %}</a></li>
  112 + <li><a href="{% url 'users:remove_account' %}">{% trans 'Remove account' %}</a></li>
  113 + </ul>
  114 + </li>
  115 + <li data-toggle="tooltip" data-placement="bottom" title data-original-title="log out"> <a href="{% url 'core:logout' %}"><i class="fa fa-sign-out" aria-hidden="true"></i></a></li>
  116 + </ul>
  117 + </div>
  118 + </div>
  119 + {% endblock %}
  120 + <div class="container-fluid">
  121 + <div class="row">
  122 + <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2 col-xl-2">
  123 + {% block sidebar %}
  124 + {% endblock %}
  125 + </div>
  126 + <div class="col-xs-10 col-sm-10 col-md-10 col-lg-10 col-xl-10">
  127 + {% block breadcrumbs %}{% endblock %}
  128 + {% block render_breadcrumbs %}{% endblock %}
  129 + </div>
  130 + <div class="col-xs-10 col-sm-10 col-md-10 col-lg-10 col-xl-10">
  131 + {% block content %}{% endblock %}
  132 + </div>
  133 + </div>
  134 + </div>
  135 +
  136 + {% block script_file %}
  137 +
  138 + {% endblock script_file %}
  139 +
  140 + {% block script_link %}
  141 +
  142 + {% endblock script_link %}
  143 + <!-- Init material Bootstrap -->
  144 + <script type="text/javascript">$.material.init()</script>
143 145 </body>
144 146  
145 147 </html>
... ...
courses/templates/category/create.html
... ... @@ -10,38 +10,6 @@
10 10 </ol>
11 11 {% endblock %}
12 12  
13   -{% block sidebar %}
14   -{{block.super}}
15   -
16   -{% if user|has_role:'professor' or user|has_role:'system_admin' %}
17   -
18   - <div class="panel panel-primary navigation">
19   - <div class="panel-heading">
20   - <h3 class="panel-title">{% trans 'Actions' %}</h3>
21   - </div>
22   - <div class="panel-body">
23   - <ul class="nav nav-pills nav-stacked">
24   - <li><a href="{% url 'course:create' %}">{% trans 'Create Course' %}</a></li>
25   - </ul>
26   - </div>
27   - </div>
28   -
29   -
30   - <div class="panel panel-primary navigation">
31   - <div class="panel-heading">
32   - <h3 class="panel-title">{% trans 'Category' %}</h3>
33   - </div>
34   - <div class="panel-body">
35   - <ul class="nav nav-pills nav-stacked">
36   - <li><a href="{% url 'course:create_cat' %}">{% trans 'Create Category' %}</a></li>
37   - <li><a href="{% url 'course:manage_cat' %}">{% trans 'List Category' %}</a></li>
38   - </ul>
39   - </div>
40   - </div>
41   -{% endif %}
42   -
43   -{% endblock %}
44   -
45 13 {% block content %}
46 14 <div class="card card-content">
47 15 <div class="card-body">
... ...
courses/templates/category/index.html
... ... @@ -11,36 +11,6 @@
11 11 </ol>
12 12 {% endblock %}
13 13  
14   -{% block sidebar %}
15   -{{block.super}}
16   -
17   - {% if user|has_role:'professor' or user|has_role:'system_admin' %}
18   -
19   - <div class="panel panel-primary navigation">
20   - <div class="panel-heading">
21   - <h3 class="panel-title">{% trans 'Actions' %}</h3>
22   - </div>
23   - <div class="panel-body">
24   - <ul class="nav nav-pills nav-stacked">
25   - <li><a href="{% url 'course:create' %}">{% trans 'Create Course' %}</a></li>
26   - </ul>
27   - </div>
28   - </div>
29   -
30   - <div class="panel panel-primary navigation">
31   - <div class="panel-heading">
32   - <h3 class="panel-title">{% trans 'Category' %}</h3>
33   - </div>
34   - <div class="panel-body">
35   - <ul class="nav nav-pills nav-stacked">
36   - <li><a href="{% url 'course:create_cat' %}">{% trans 'Create Category' %}</a></li>
37   - <li><a href="{% url 'course:manage_cat' %}">{% trans 'List Category' %}</a></li>
38   - </ul>
39   - </div>
40   - </div>
41   -{% endif %}
42   -{% endblock %}
43   -
44 14 {% block content %}
45 15 {% if messages %}
46 16 {% for message in messages %}
... ... @@ -104,4 +74,4 @@
104 74 </div>
105 75 <div class="row" id="modal_category">
106 76 <script src="{% static 'js/modal_category.js' %}"></script>
107   -{% endblock %}
108 77 \ No newline at end of file
  78 +{% endblock %}
... ...
courses/templates/category/update.html
1   -{% extends 'Home.html' %}
  1 +{% extends 'home.html' %}
2 2  
3 3 {% load static i18n %}
4 4 {% load static i18n permission_tags %}
... ... @@ -11,35 +11,6 @@
11 11 </ol>
12 12 {% endblock %}
13 13  
14   -{% block sidebar %}
15   -{{block.super}}
16   -
17   -{% if user|has_role:'professor' or user|has_role:'system_admin' %}
18   -
19   - <div class="panel panel-primary navigation">
20   - <div class="panel-heading">
21   - <h3 class="panel-title">{% trans 'Actions' %}</h3>
22   - </div>
23   - <div class="panel-body">
24   - <ul class="nav nav-pills nav-stacked">
25   - <li><a href="{% url 'course:create' %}">{% trans 'Create Course' %}</a></li>
26   - </ul>
27   - </div>
28   - </div>
29   - <div class="panel panel-primary navigation">
30   - <div class="panel-heading">
31   - <h3 class="panel-title">{% trans 'Category' %}</h3>
32   - </div>
33   - <div class="panel-body">
34   - <ul class="nav nav-pills nav-stacked">
35   - <li><a href="{% url 'course:create_cat' %}">{% trans 'Create Category' %}</a></li>
36   - <li><a href="{% url 'course:manage_cat' %}">{% trans 'List Category' %}</a></li>
37   - </ul>
38   - </div>
39   - </div>
40   -{% endif %}
41   -{% endblock %}
42   -
43 14 {% block content %}
44 15 {% if messages %}
45 16 {% for message in messages %}
... ...
courses/templates/course/course_card.html
... ... @@ -7,13 +7,13 @@
7 7 <div class="col-md-1 moreAccordion" data-toggle="collapse" data-parent="#accordion-{{course.slug}}" href=".collapseOne-{{course.slug}}" aria-expanded="false" aria-controls="collapseOne-{{course.slug}}">
8 8 <button class="btn btn-default btn-sm caret-square"><i class="fa fa-caret-square-o-down fa-2x" aria-hidden="true"></i></button>
9 9 </div>
10   - <div class="col-xs-9 col-md-4 titleTopic">
  10 + <div class="col-xs-5 col-md-5 titleTopic">
11 11 <a role="button" href="{% url 'course:view' course.slug %}">
12 12 <h4>{{course.name}}</h4>
13 13 </a>
14 14 </div>
15 15 {% if user|has_role:'professor' or user|has_role:'system_admin' %}
16   - <div class="col-xs-4 col-md-6 divMoreActions" >
  16 + <div class="col-xs-6 col-md-6 divMoreActions" >
17 17 <div class="btn-group">
18 18 <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
19 19 <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i>
... ... @@ -55,11 +55,11 @@
55 55 </div>
56 56 </div>
57 57  
58   -<div class="modal fade" id="replicateCourse" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  58 +<div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
59 59 <div class="modal-dialog" role="document">
60 60 <div class="modal-content">
61 61 <div class="modal-header">
62   - <h4 class="modal-title" id="myModalLabel">{% trans 'Repicate Course' %}</h4>
  62 + <h4 class="modal-title">{% trans 'Repicate Course' %}</h4>
63 63 </div>
64 64 <div class="modal-body">
65 65 <section>
... ... @@ -73,4 +73,4 @@
73 73 </div>
74 74 </div>
75 75 </div>
76   - <script type="text/javascript" src="{% static 'js/course.js' %}"></script>
77 76 \ No newline at end of file
  77 + <script type="text/javascript" src="{% static 'js/course.js' %}"></script>
... ...
courses/templates/course/create.html
... ... @@ -43,7 +43,7 @@
43 43 </div>
44 44 {% endfor %}
45 45 <div class="row text-center">
46   - <input type="submit" value="{% trans 'Create' %}" class="btn btn-primary" />
  46 + <input type="submit" value="{% trans 'Create' %}" class="btn btn-primary btn-raised" />
47 47 </div>
48 48 </form>
49 49 </div>
... ...
courses/templates/course/delete.html
... ... @@ -20,7 +20,7 @@
20 20 <!-- Modal Footer -->
21 21 <div class="modal-footer">
22 22 <!-- Don't remove that!!! -->
23   - <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Close" %}</button>
  23 + <button type="button" class="btn btn-default btn-raised" data-dismiss="modal">{% trans "Close" %}</button>
24 24 <button type="submit" id="button" form="delete_form" class="btn btn-primary btn-raised">{% trans "Delete" %}</button>
25 25 <script>
26 26 $("#delete_form").submit(function(event) {
... ...
courses/templates/course/home.html
... ... @@ -1,23 +0,0 @@
1   -{% extends 'app/base.html' %}
2   -
3   -{% load static i18n %}
4   -{% load widget_tweaks %}
5   -
6   -{% block breadcrumbs %}
7   - <ol class="breadcrumb">
8   - <li><a href="{% url 'app:index' %}">{% trans 'Home' %}</a></li>
9   - <li class="active">{% trans 'Home Course' %}</li>
10   - </ol>
11   -{% endblock %}
12   -
13   -{% block sidebar %}
14   - <div class="list-group">
15   - <a href="{% url 'course:manage' %}" class="list-group-item">
16   - {% trans 'Courses' %}
17   - </a>
18   - </div>
19   -{% endblock %}
20   -
21   -{% block content %}
22   -
23   -{% endblock %}
courses/templates/course/index.html
... ... @@ -10,47 +10,6 @@
10 10  
11 11 {% endblock %}
12 12  
13   -{% block sidebar %}
14   -{{block.super}}
15   - {% if user|has_role:'professor' or user|has_role:'system_admin' %}
16   - <div class="panel panel-primary">
17   - <div class="panel-heading">
18   - <h3 class="panel-title">{% trans 'Category' %}</h3>
19   - </div>
20   - <div class="panel-body">
21   - <ul class="nav nav-pills nav-stacked">
22   - <li><a href="{% url 'course:create_cat' %}">{% trans 'Create Category' %}</a></li>
23   - <li><a href="{% url 'course:manage_cat' %}">{% trans 'List Category' %}</a></li>
24   - </ul>
25   - </div>
26   - </div>
27   - {% endif %}
28   - <div class="panel-group" id="accordion">
29   - <div class="panel panel-primary">
30   - <div class="panel-heading">
31   - <h4 class="panel-title">
32   - <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
33   - </span>{% trans 'Categorys' %}</a>
34   - </h4>
35   - </div>
36   - <div id="collapseOne" class="panel-collapse collapse in">
37   - <div class="panel-body">
38   - <table class="table">
39   - {% for category in categorys_courses %}
40   - <tr>
41   - <td>
42   - <a href="?category={{category.name}}">{{category.name}}</a>
43   - </td>
44   - </tr>
45   - {% endfor %}
46   - </table>
47   - </div>
48   - </div>
49   - </div>
50   - </div>
51   -
52   -{% endblock %}
53   -
54 13 {% block content %}
55 14 {% if messages %}
56 15 {% for message in messages %}
... ... @@ -64,7 +23,7 @@
64 23 {% endif %}
65 24  
66 25 <div class="col-md-12 cards-content">
67   - <form id="searchform" action="{% url 'course:manage' %}" method="get" accept-charset="utf-8">
  26 + <form id="searchform" method="get" accept-charset="utf-8">
68 27 <div class="input-group">
69 28 <div class="form-group is-empty">
70 29 <input type="text" class="form-control" placeholder="Search Courses" name="q"></div>
... ... @@ -92,10 +51,10 @@
92 51 </div>
93 52 </div>
94 53 <div id="{{category.slug}}" class="panel-collapse collapse">
95   - {% for course in category.course_category.all %}
96   - {% if user in course.students.all or user in course.professors.all or user|has_role:'system_admin' %}
  54 + {% for course in category.course_category %}
  55 + {# {% if user in course.students.all or user in course.professors.all or user|has_role:'system_admin' %}#}
97 56 {% include "course/course_card.html" %}
98   - {% endif %}
  57 + {# {% endif %}#}
99 58 {% endfor %}
100 59 </div>
101 60 </div>
... ... @@ -104,9 +63,6 @@
104 63  
105 64 {% endfor %}
106 65 </div>
107   - {% if user|has_role:'professor' or user|has_role:'system_admin' %}
108   - <a href="{% url 'course:create' %}" class="btn btn-primary btn-fab float-button"><i class="fa fa-plus material-icons"></i></a>
109   - {% endif %}
110 66 <div class="col-md-12">
111 67 <nav aria-label="Page navigation">
112 68 <ul class="pagination">
... ...
courses/templates/course/replicate.html
... ... @@ -4,132 +4,139 @@
4 4 {% load widget_tweaks %}
5 5  
6 6 {% block breadcrumbs %}
7   - <ol class="breadcrumb">
8   - <li><a href="{% url 'app:index' %}">{% trans 'Home' %}</a></li>
9   - <li class="active">{% trans 'Replicate Course' %}</li>
10   - </ol>
  7 +<ol class="breadcrumb">
  8 + <li><a href="{% url 'app:index' %}">{% trans 'Home' %}</a></li>
  9 + <li class="active">{% trans 'Replicate Course' %}</li>
  10 +</ol>
11 11 {% endblock %}
12 12  
13 13 {% block content %}
14 14 <div class="card card-content">
15   - <div class="card-body">
16   - <form method="post" action="" enctype="multipart/form-data">{% csrf_token %}
17   - <div class="form-group is-fileinput">
18   - <label for="id_name">{% trans 'Name' %}</label>
19   -
20   -
21   - <input class="form-control" id="id_name" maxlength="100" name="name" type="text" required="" value="{{course.name}}">
22   -
23   - <span class="help-block">{% trans 'Course name' %}</span>
24   -
25   - </div>
26   -
27   - <div class="form-group is-fileinput">
28   - <label for="id_objectivies">{% trans 'Objectives' %}</label>
29   -
30   - <textarea class="form-control" cols="80" id="id_objectivies" name="objectivies" rows="5">{{course.objectivies}}</textarea>
31   -
32   - <span class="help-block">{% trans 'Course objective' %}</span>
33   -
34   - </div>
35   -
36   - <div class="form-group is-fileinput">
37   - <label for="id_content">{% trans 'Content' %}</label>
38   -
39   -
40   - <textarea class="form-control" cols="80" id="id_content" name="content" rows="5">{{course.content}}</textarea>
41   -
42   - <span class="help-block">{% trans 'Course modules' %}</span>
43   -
44   - </div>
45   -
46   - <div class="form-group is-fileinput">
47   - <label for="id_max_students">{% trans 'Number of studets maximum' %}</label>
48   -
49   -
50   - <input class="form-control" id="id_max_students" min="0" name="max_students" type="number" value="{{course.max_students}}">
51   -
52   - <span class="help-block">{% trans 'Max number of students that a class can have' %}</span>
53   -
54   - </div>
55   -
56   - <div class="form-group is-fileinput">
57   - <label for="id_init_register_date">{% trans 'Course registration start date' %}</label>
58   -
59   -
60   - <input type="text" class="form-control date-picker" name="init_register_date" value="{{field.value|date:'SHORT_DATE_FORMAT'}}" min="{{now|date:'SHORT_DATE_FORMAT'}}">
61   -
62   - <span class="help-block">{% trans 'Date that starts the registration period of the course (dd/mm/yyyy)' %}</span>
63   -
64   - </div>
65   -
66   - <div class="form-group is-fileinput">
67   - <label for="id_end_register_date">{% trans 'Course registration end date' %}</label>
68   -
69   -
70   - <input type="text" class="form-control date-picker" name="end_register_date" value="{{field.value|date:'SHORT_DATE_FORMAT'}}" min="{{now|date:'SHORT_DATE_FORMAT'}}">
71   -
72   - <span class="help-block">{% trans 'Date that ends the registration period of the course (dd/mm/yyyy)' %}</span>
73   -
74   - </div>
75   -
76   - <div class="form-group is-fileinput">
77   - <label for="id_init_date">{% trans 'Course start date' %}</label>
78   -
79   -
80   - <input type="text" class="form-control date-picker" name="init_date" value="{{field.value|date:'SHORT_DATE_FORMAT'}}" min="{{now|date:'SHORT_DATE_FORMAT'}}">
81   -
82   - <span class="help-block">{% trans 'Date that the course starts (dd/mm/yyyy)' %}</span>
83   -
84   - </div>
85   -
86   - <div class="form-group is-fileinput">
87   - <label for="id_end_date">{% trans 'Course end date' %}</label>
88   -
89   -
90   - <input type="text" class="form-control date-picker" name="end_date" value="{{field.value|date:'SHORT_DATE_FORMAT'}}" min="{{now|date:'SHORT_DATE_FORMAT'}}">
91   -
92   - <span class="help-block">{% trans 'Date that the course ends (dd/mm/yyyy)' %}</span>
93   -
94   - </div>
95   -
96   - <div class="form-group is-fileinput">
97   - <label for="id_image">{% trans 'Imagem' %}</label>
98   -
99   -
100   - <input class="form-control" id="id_image" name="image" type="file">
101   - <div class="input-group">
102   - <input type="text" readonly="" class="form-control" placeholder="Choose your photo...">
103   - <span class="input-group-btn input-group-sm">
104   - <button type="button" class="btn btn-fab btn-fab-mini">
105   - <i class="material-icons">{% trans 'attach_file' %}</i>
106   - </button>
107   - </span>
108   - </div>
109   -
110   - <span class="help-block">{% trans 'Representative image of the course' %}</span>
111   -
112   - </div>
113   -
114   - <div class="form-group is-fileinput">
115   - <label for="id_category">{% trans 'CourseCategory' %}</label>
116   -
117   -
118   - <select class="form-control" id="id_category" name="category" required="">
119   - {% for category in categorys_courses %}
120   - <option value="{{category.id}}">{{category}}</option>
121   - {% endfor %}
122   - </select>
123   -
124   - <span class="help-block">{% trans 'CourseCategory which the course belongs' %}</span>
125   -
126   - </div>
127   -
128   - <div class="row text-center">
129   - <input type="submit" value="Create" class="btn btn-primary">
130   - </div>
131   - </form>
132   - </div>
  15 + <div class="card-body">
  16 + <form method="post" action="" enctype="multipart/form-data">
  17 + {% csrf_token %}
  18 + <div class="form-group is-fileinput">
  19 + <label for="id_name">{% trans 'Name' %}</label>
  20 +
  21 +
  22 + <input class="form-control" id="id_name" maxlength="100" name="name" type="text" required="" value="{{course.name}}">
  23 +
  24 + <span class="help-block">{% trans 'Course name' %}</span>
  25 +
  26 + </div>
  27 +
  28 + <div class="form-group is-fileinput">
  29 + <label for="id_objectivies">{% trans 'Objectives' %}</label>
  30 +
  31 + <textarea class="form-control" cols="80" id="id_objectivies" name="objectivies" rows="5">{{ course.objectivies }}</textarea>
  32 +
  33 + <span class="help-block">{% trans 'Course objective' %}</span>
  34 +
  35 + </div>
  36 +
  37 + <div class="form-group is-fileinput">
  38 + <label for="id_content">{% trans 'Content' %}</label>
  39 +
  40 +
  41 + <textarea class="form-control" cols="80" id="id_content" name="content" rows="5">{{course.content}}</textarea>
  42 +
  43 + <span class="help-block">{% trans 'Course modules' %}</span>
  44 +
  45 + </div>
  46 +
  47 + <div class="form-group is-fileinput">
  48 + <label for="id_max_students">{% trans 'Number of studets maximum' %}</label>
  49 +
  50 +
  51 + <input class="form-control" id="id_max_students" min="0" name="max_students" type="number" value="{{course.max_students}}">
  52 +
  53 + <span class="help-block">{% trans 'Max number of students that a class can have' %}</span>
  54 +
  55 + </div>
  56 +
  57 + <div class="form-group is-fileinput">
  58 + <label for="id_init_register_date">{% trans 'Course registration start date' %}</label>
  59 +
  60 +
  61 + <input type="text" class="form-control date-picker" name="init_register_date" value="{{field.value|date:'SHORT_DATE_FORMAT'}}" min="{{now|date:'SHORT_DATE_FORMAT'}}">
  62 +
  63 + <span class="help-block">{% trans 'Date that starts the registration period of the course (dd/mm/yyyy)' %}</span>
  64 +
  65 + </div>
  66 +
  67 + <div class="form-group is-fileinput">
  68 + <label for="id_end_register_date">{% trans 'Course registration end date' %}</label>
  69 +
  70 +
  71 + <input type="text" class="form-control date-picker" name="end_register_date" value="{{field.value|date:'SHORT_DATE_FORMAT'}}" min="{{now|date:'SHORT_DATE_FORMAT'}}">
  72 +
  73 + <span class="help-block">{% trans 'Date that ends the registration period of the course (dd/mm/yyyy)' %}</span>
  74 +
  75 + </div>
  76 +
  77 + <div class="form-group is-fileinput">
  78 + <label for="id_init_date">{% trans 'Course start date' %}</label>
  79 +
  80 +
  81 + <input type="text" class="form-control date-picker" name="init_date" value="{{field.value|date:'SHORT_DATE_FORMAT'}}" min="{{now|date:'SHORT_DATE_FORMAT'}}">
  82 +
  83 + <span class="help-block">{% trans 'Date that the course starts (dd/mm/yyyy)' %}</span>
  84 +
  85 + </div>
  86 +
  87 + <div class="form-group is-fileinput">
  88 + <label for="id_end_date">{% trans 'Course end date' %}</label>
  89 +
  90 +
  91 + <input type="text" class="form-control date-picker" name="end_date" value="{{field.value|date:'SHORT_DATE_FORMAT'}}" min="{{now|date:'SHORT_DATE_FORMAT'}}">
  92 +
  93 + <span class="help-block">{% trans 'Date that the course ends (dd/mm/yyyy)' %}</span>
  94 +
  95 + </div>
  96 +
  97 + <div class="form-group is-fileinput">
  98 + <label for="id_image">{% trans 'Imagem' %}</label>
  99 +
  100 +
  101 + <input class="form-control" id="id_image" name="image" type="file">
  102 + <div class="input-group">
  103 + <input type="text" readonly="" class="form-control" placeholder="Choose your photo...">
  104 + <span class="input-group-btn input-group-sm">
  105 + <button type="button" class="btn btn-fab btn-fab-mini">
  106 + <i class="material-icons">{% trans 'attach_file' %}</i>
  107 + </button>
  108 + </span>
  109 + </div>
  110 +
  111 + <span class="help-block">{% trans 'Representative image of the course' %}</span>
  112 +
  113 + </div>
  114 +
  115 + <div class="form-group is-fileinput">
  116 + <label for="id_category">{% trans 'CourseCategory' %}</label>
  117 +
  118 +
  119 + <select class="form-control" id="id_category" name="category" required="">
  120 + {% for category in categorys_courses %}
  121 + <option value="{{category.id}}">{{category}}</option>
  122 + {% endfor %}
  123 + </select>
  124 +
  125 + <span class="help-block">{% trans 'CourseCategory which the course belongs' %}</span>
  126 +
  127 + </div>
  128 +
  129 + <div class="row text-center">
  130 + <input type="submit" value="Create" class="btn btn-primary btn-raised">
  131 + </div>
  132 + </form>
  133 + </div>
133 134 </div>
134   -</br>
135   -{% endblock %}
136 135 \ No newline at end of file
  136 + <script>
  137 + $(document).ready(function() {
  138 + $('#id_objectivies').summernote();
  139 + $('#id_content').summernote();
  140 + });
  141 + </script>
  142 +</br></br></br>
  143 +{% endblock %}
... ...
courses/templates/course/update.html
... ... @@ -41,7 +41,7 @@
41 41 </div>
42 42 {% endfor %}
43 43 <div class="row text-center">
44   - <input type="submit" value="{% trans 'Update' %}" class="btn btn-primary" />
  44 + <input type="submit" value="{% trans 'Update' %}" class="btn btn-primary btn-raised" />
45 45 </div>
46 46 </form>
47 47 </div>
... ... @@ -56,4 +56,4 @@
56 56 language: locale,
57 57 });
58 58 </script>
59   -{% endblock %}
60 59 \ No newline at end of file
  60 +{% endblock %}
... ...
courses/templates/course/view.html
... ... @@ -21,23 +21,6 @@
21 21 </ol>
22 22 {% endblock %}
23 23  
24   -{% block sidebar %}
25   -{{ block.super}}
26   - <div class="panel panel-primary">
27   - <div class="panel-heading">
28   - <h5>{% trans 'Categories' %}</h5>
29   - </div>
30   - <div class="panel-body">
31   - <ul class="nav nav-pills nav-stacked">
32   - <li {% if category is None %}class="active"{% endif %}><a href="{% url 'course:view' course.slug %}">{% trans 'All' %}</a></li>
33   - {% for cat in categorys_subjects %}
34   - <li {% if category == cat.slug %}class="active"{% endif %}><a href="{% url 'course:view_filter' course.slug cat.slug %}">{{ cat }}</a></li>
35   - {% endfor %}
36   - </ul>
37   - </div>
38   - </div>
39   -{% endblock %}
40   -
41 24 {% block content %}
42 25  
43 26 <div class="col-md-12 cards-content">
... ... @@ -94,8 +77,8 @@
94 77 <div>
95 78 </div>
96 79 <div class="modal-footer">
97   - <button type="button" data-dismiss="modal" class="btn btn-default">{% trans "Cancel" %}</button>
98   - <a href="#" target="_self"><button type="button" class="btn btn-primary"> {% trans "Confirm" %}</button></a>
  80 + <button type="button" data-dismiss="modal" class="btn btn-default btn-raised">{% trans "Cancel" %}</button>
  81 + <a href="#" target="_self"><button type="button" class="btn btn-primary btn-raised"> {% trans "Confirm" %}</button></a>
99 82 </div>
100 83 </div>
101 84 </div>
... ... @@ -132,7 +115,7 @@
132 115 <li><a href="{% url 'course:update_subject' subject.slug %}"> <i class="fa fa-pencil fa-fw" aria-hidden="true"></i>&nbsp; {% trans "Edit" %}</a></li>
133 116 <li><a href="{% url 'course:delete_subject' subject.slug %}" ><i class="fa fa-trash fa-fw" aria-hidden="true"></i>&nbsp; {% trans "Remove" %}</a></li>
134 117 </ul>
135   -
  118 +
136 119 </div>
137 120 </div>
138 121 {% endif %}
... ...
courses/templates/exercise/create_exercise.html 0 → 100644
... ... @@ -0,0 +1,74 @@
  1 +{% load widget_tweaks i18n %}
  2 +<!--MODAL CREATE LINK-->
  3 +<div class="modal fade" id="createLinksModal" tabindex="-1" role="dialog" aria-labelledby="createLink">
  4 + <div class="modal-dialog" role="document">
  5 + <div class="modal-content">
  6 + <div class="modal-header">
  7 + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  8 + <h4 class="modal-title" id="createLink">{% trans 'Create a New Exercise' %}</h4>
  9 + </div>
  10 + <div class="modal-body">
  11 + <!-- Card -->
  12 + <form method="post" action="" id="form-link" enctype="multipart/form-data">
  13 + {% csrf_token %}
  14 + {% for field in form %}
  15 + <div class ="form-group">
  16 + {% if field.field.required %}
  17 + <label for="{{ field.auto_id }}">{{ field.label }}<span>*</span></label>
  18 + {% endif %}
  19 + {% render_field field class='form-control input-sm' %}
  20 + {% if field.errors %}
  21 + <div class="alert alert-danger alert-dismissible clearfix" role="alert">
  22 + <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  23 + <span aria-hidden="true">&times;</span>
  24 + </button>
  25 + <ul>
  26 + {% for error in field.errors %}
  27 + <li>{{ error }}</li>
  28 + {% endfor %}
  29 + </ul>
  30 + </div>
  31 + {% endif %}
  32 + </div>
  33 + {% endfor %}
  34 + <div class="form-group">
  35 + <button type="button" class="btn btn-raised btn-default " data-dismiss="modal">{% trans "Cancel" %}</button>
  36 + <button class="btn btn-raised btn-primary" type="submit">{% trans 'Submit' %}</button>
  37 + </div>
  38 + <!-- .end Card -->
  39 + </div>
  40 + </div>
  41 + </div>
  42 +</div>
  43 +<!-- EndModal -->
  44 +{% block script_link %}
  45 + {# // <script src="{% static 'js/links.js' %}"></script> #}
  46 + <script type="text/javascript">
  47 + $("#form-link").submit(function(event) {
  48 + $("#createLinksModal").modal("hide");
  49 + var data = new FormData($('#form-link').get(0));
  50 + $.ajax({
  51 + url: "{% url 'course:links:create_link' topic.slug %}",
  52 + type: $("#form-link").attr('method'),
  53 + data: data,
  54 + cache: false,
  55 + processData: false,
  56 + contentType: false,
  57 + success: function(data) {
  58 + $('#requisicoes_ajax').empty();
  59 + $('#list-topic{{ topic.id }}-links').append(data);
  60 + $('#list-topic{{ topic.id }}-links-edit').append(data);
  61 + alertify.alert('Link successfully created!')
  62 + },
  63 + error: function(data){
  64 + $("div.modal-backdrop.fade.in").remove();
  65 + $('#requisicoes_ajax').empty();
  66 + $('#requisicoes_ajax').append(data.responseText);
  67 + $('#createLinksModal').modal('show');
  68 + alertify.alert('Invalid link, insert a valid one!');
  69 + }
  70 + });
  71 + event.preventDefault();
  72 + });
  73 + </script>
  74 +{% endblock script_link %}
0 75 \ No newline at end of file
... ...
courses/templates/subject/delete.html
... ... @@ -20,7 +20,7 @@
20 20 <!-- Modal Footer -->
21 21 <div class="modal-footer">
22 22 <!-- Don't remove that!!! -->
23   - <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Close" %}</button>
  23 + <button type="button" class="btn btn-raised btn-default" data-dismiss="modal">{% trans "Close" %}</button>
24 24 <button type="submit" id="button" form="delete_form" class="btn btn-primary btn-raised">{% trans "Delete" %}</button>
25 25 <script>
26 26 $("#delete_form").submit(function(event) {
... ...
courses/templates/subject/form_view_student.html
... ... @@ -42,6 +42,8 @@
42 42 {% if professor_links%}
43 43 {% include "links/create_link.html" %}
44 44 {% include "links/delete_link.html" %}
  45 + {% else %}
  46 + {% include "exercise/create_exercise.html" %}
45 47 {% endif %}
46 48  
47 49  
... ...
courses/templates/subject/index.html
... ... @@ -21,11 +21,6 @@
21 21 <li class="active">{{ subject }}</li>
22 22 </ol>
23 23 {% endblock %}
24   -{% block sidebar %}
25   -{{block.super}}
26   -
27   -
28   -{% endblock %}
29 24  
30 25 {% block content %}
31 26 <div class="panel panel-info">
... ...
courses/templates/subject/replicate.html
... ... @@ -19,7 +19,7 @@
19 19 <label for="{{ field.auto_id }}" class="control-label label-static"> {{ field.label }}</label>
20 20  
21 21 {% if field.auto_id == 'id_init_date' or field.auto_id == 'id_end_date'%}
22   - <input type="text" class="form-control date-picker" name="{{field.name}}" value="{{field.value|date:'SHORT_DATE_FORMAT'}}" min="{{now|date:'SHORT_DATE_FORMAT'}}">
  22 + <input type="text" class="form-control date-picker" name="{{field.name}}" value="{{field.value|date:'SHORT_DA E_FORMAT'}}" min="{{now|date:'SHORT_DATE_FORMAT'}}">
23 23 {% else %}
24 24 {% render_field field class='form-control' placeholder=field.label%}
25 25 {% endif %}
... ...
courses/templates/subject_category/index.html
... ... @@ -11,10 +11,6 @@
11 11 </ol>
12 12 {% endblock %}
13 13  
14   -{% block sidebar %}
15   -{{block.super}}
16   -{% endblock %}
17   -
18 14 {% block content %}
19 15 <div class="panel panel-info">
20 16 <div class="panel-heading">
... ...
courses/templates/topic/delete.html
... ... @@ -20,7 +20,7 @@
20 20 <!-- Modal Footer -->
21 21 <div class="modal-footer">
22 22 <!-- Don't remove that!!! -->
23   - <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Close" %}</button>
  23 + <button type="button" class="btn btn-default btn-raised" data-dismiss="modal">{% trans "Close" %}</button>
24 24 <button type="submit" id="button" form="delete_topic_{{topic.slug}}" class="btn btn-primary btn-raised">{% trans "Delete" %}</button>
25 25 <script>
26 26 $("#delete_topic_{{topic.slug}}").submit(function(event) {
... ...
courses/templates/topic/index.html
... ... @@ -26,10 +26,6 @@
26 26 </ol>
27 27 {% endblock %}
28 28  
29   -{% block sidebar %}
30   -{{block.super}}
31   -{% endblock %}
32   -
33 29 {% block content %}
34 30 <div class="col-md-12 col-xs-12 col-sm-12">
35 31 <div class="panel panel-info">
... ...
courses/views.py
... ... @@ -31,6 +31,33 @@ import time
31 31 from rest_framework import viewsets, permissions
32 32 from .serializers import *
33 33  
  34 +class Category:
  35 + name = None
  36 + slug = None
  37 + course_category = []
  38 +
  39 +def course_category(list_courses):
  40 +
  41 + list_courses = list_courses.distinct().order_by('category','name')
  42 + categorys_courses = []
  43 + cat_slug = None
  44 + cat = None
  45 + for course in list_courses:
  46 + if (course.category.slug != cat_slug):
  47 + if (cat != None):
  48 + categorys_courses.append(cat)
  49 + cat_slug = course.category.slug
  50 + cat = Category()
  51 + cat.name = course.category.name
  52 + cat.slug = cat_slug
  53 + cat.course_category = []
  54 + cat.course_category.append(course)
  55 +
  56 + if (cat):
  57 + categorys_courses.append(cat)
  58 +
  59 + return categorys_courses
  60 +
34 61 class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView):
35 62  
36 63 login_url = reverse_lazy("core:home")
... ... @@ -38,8 +65,6 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView):
38 65 queryset = Course.objects.all()
39 66 template_name = 'course/index.html'
40 67 context_object_name = 'courses'
41   - paginate_by = 10
42   - aparece = True
43 68  
44 69  
45 70 def get_queryset(self):
... ... @@ -48,14 +73,12 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView):
48 73 course_search = self.request.GET.get('q', None)
49 74 category_search = self.request.GET.get('category', None)
50 75 if course_search:
51   - self.aparece = False
52 76 query_list = course_search.split()
53 77 result = result.filter(
54 78 reduce(operator.and_,
55 79 (Q(name__icontains=q) for q in query_list))
56 80 )
57 81 if category_search:
58   - self.aparece = False
59 82 query_list = category_search.split()
60 83 result = result.filter(
61 84 reduce(operator.and_,
... ... @@ -66,58 +89,40 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView):
66 89 def get_context_data(self, **kwargs):
67 90 context = super(IndexView, self).get_context_data(**kwargs)
68 91 list_courses = None
69   - categorys_courses = None
70   - if has_role(self.request.user,'professor'):
71   - list_courses = Course.objects.filter(Q(professors = True)|Q(professors__name = self.request.user.name)).order_by('name')
72   - categorys_courses = CourseCategory.objects.filter(course_category__professors__name = self.request.user.name).distinct()
73   - elif has_role(self.request.user,'system_admin'):
74   - list_courses = queryset.order_by('name')
75   - categorys_courses = CourseCategory.objects.all()
  92 + if has_role(self.request.user,'system_admin'):
  93 + list_courses = self.get_queryset().order_by('name')
  94 + # categorys_courses = CourseCategory.objects.all()
  95 + elif has_role(self.request.user,'professor'):
  96 + list_courses = self.get_queryset().filter(professors__in = [self.request.user])
  97 + # categorys_courses = CourseCategory.objects.filter(course_category__professors__name = self.request.user.name).distinct()
76 98 elif has_role(self.request.user, 'student'):
77   - list_courses = Course.objects.filter(Q(students = True)|Q(students__name = self.request.user.name)).order_by('name')
78   - categorys_courses = CourseCategory.objects.filter(course_category__students__name = self.request.user.name).distinct()
79   -
80   - paginator = Paginator(list_courses, self.paginate_by)
81   - page = self.request.GET.get('page')
82   -
83   - try:
84   - list_courses = paginator.page(page)
85   - except PageNotAnInteger:
86   - list_courses = paginator.page(1)
87   - except EmptyPage:
88   - list_courses = paginator.page(paginator.num_pages)
89   -
90   - context['list_courses'] = list_courses
91   - context['categorys_courses'] = categorys_courses
92   - context['aparece'] = self.aparece
  99 + list_courses = self.get_queryset().filter(students__in = [self.request.user])
93 100  
  101 + context['categorys_courses'] = course_category(list_courses)
94 102 return context
95 103  
96 104 class AllCoursesView(LoginRequiredMixin, NotificationMixin, generic.ListView):
97 105  
98 106 login_url = reverse_lazy("core:home")
99 107 redirect_field_name = 'next'
100   - queryset = Course.objects.all()
101 108 template_name = 'course/index.html'
102 109 context_object_name = 'courses'
103   - paginate_by = 5
104   - aparece = True
105 110  
106 111  
107 112 def get_queryset(self):
108   - result = super(AllCoursesView, self).get_queryset()
  113 + result = Course.objects.all()
109 114  
110 115 course_search = self.request.GET.get('q', None)
111 116 category_search = self.request.GET.get('category', None)
112 117 if course_search:
113   - self.aparece = False
  118 + # self.aparece = False
114 119 query_list = course_search.split()
115 120 result = result.filter(
116 121 reduce(operator.and_,
117 122 (Q(name__icontains=q) for q in query_list))
118 123 )
119 124 if category_search:
120   - self.aparece = False
  125 + # self.aparece = False
121 126 query_list = category_search.split()
122 127 result = result.filter(
123 128 reduce(operator.and_,
... ... @@ -127,25 +132,10 @@ class AllCoursesView(LoginRequiredMixin, NotificationMixin, generic.ListView):
127 132  
128 133 def get_context_data(self, **kwargs):
129 134 context = super(AllCoursesView, self).get_context_data(**kwargs)
130   - list_courses = None
131   - categorys_courses = None
132   - list_courses = Course.objects.all().order_by('name')
133   - #categorys_courses = CourseCategory.objects.all().distinct().order_by('name')
134   - categorys_courses = CourseCategory.objects.all()
135   - paginator = Paginator(list_courses, self.paginate_by)
136   - page = self.request.GET.get('page')
137 135  
138   - try:
139   - list_courses = paginator.page(page)
140   - except PageNotAnInteger:
141   - list_courses = paginator.page(1)
142   - except EmptyPage:
143   - list_courses = paginator.page(paginator.num_pages)
144   -
145   - context['list_courses'] = list_courses
146   - context['categorys_courses'] = categorys_courses
147   - context['aparece'] = self.aparece
  136 + list_courses = self.get_queryset()
148 137  
  138 + context['categorys_courses'] = course_category(list_courses)
149 139 return context
150 140  
151 141 class CreateCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin, generic.edit.CreateView):
... ... @@ -1029,4 +1019,3 @@ class TopicViewSet(viewsets.ModelViewSet):
1029 1019 queryset = Topic.objects.all()
1030 1020 serializer_class = TopicSerializer
1031 1021 permissions_class = (permissions.IsAuthenticatedOrReadOnly)
1032   -
... ...
files/tests/__init__.py 0 → 100644
files/tests/tests.py 0 → 100644
... ... @@ -0,0 +1,183 @@
  1 +from django.test import TestCase, Client
  2 +from django.core.urlresolvers import reverse
  3 +from django.core.files.uploadedfile import SimpleUploadedFile
  4 +from rolepermissions.shortcuts import assign_role
  5 +from django.utils.translation import ugettext_lazy as _
  6 +from core.models import MimeType
  7 +from users.models import User
  8 +from files.models import TopicFile
  9 +from files.forms import FileForm, UpdateFileForm
  10 +from courses.models import CourseCategory, Course, Subject, Topic
  11 +
  12 +class FileTestCase(TestCase):
  13 +
  14 + def setUp(self):
  15 + self.client = Client()
  16 +
  17 + self.admin = User.objects.create_user(
  18 + username = 'admin',
  19 + email = 'testing@amadeus.com',
  20 + is_staff = True,
  21 + is_active = True,
  22 + password = 'testing123'
  23 + )
  24 + assign_role(self.admin, 'system_admin')
  25 +
  26 + self.teacher = User.objects.create_user(
  27 + username = 'teacher',
  28 + email = 'teacherg@school.com',
  29 + is_staff = False,
  30 + is_active = True,
  31 + password = 'teaching123'
  32 + )
  33 + assign_role(self.teacher, 'professor')
  34 +
  35 + self.student = User.objects.create_user(
  36 + username = 'student',
  37 + email = 'student@amadeus.com',
  38 + is_staff = False,
  39 + is_active = True,
  40 + password = 'testing123',
  41 + type_profile = 2
  42 + )
  43 + assign_role(self.student, 'student')
  44 +
  45 + self.category = CourseCategory(
  46 + name = 'Categoria Teste',
  47 + slug = 'categoria_teste'
  48 + )
  49 + self.category.save()
  50 +
  51 + self.course = Course(
  52 + name = 'Curso Teste',
  53 + slug = 'curso_teste',
  54 + max_students = 50,
  55 + init_register_date = '2016-08-26',
  56 + end_register_date = '2016-10-01',
  57 + init_date = '2016-10-05',
  58 + end_date = '2017-10-05',
  59 + category = self.category,
  60 + public = True,
  61 + )
  62 + self.course.save()
  63 +
  64 + self.subject = Subject(
  65 + name = 'Subject Test',
  66 + description = "description of the subject test file",
  67 + visible = True,
  68 + init_date = '2016-10-05',
  69 + end_date = '2017-10-05',
  70 + course = self.course,
  71 + )
  72 + self.subject.save()
  73 +
  74 + self.subject.professors.add(self.teacher)
  75 +
  76 + self.topic = Topic(
  77 + name = 'Topic Test',
  78 + description = "description of the topic test file",
  79 + subject = self.subject,
  80 + owner = self.teacher,
  81 + )
  82 + self.topic.save()
  83 +
  84 + """
  85 + Manual upload file
  86 + Change directory for a file in your computer and be happy...
  87 + """
  88 + upload_file = open('/home/ailson/Pictures/teste.png', 'rb')
  89 + self.file = SimpleUploadedFile(upload_file.name, upload_file.read())
  90 +
  91 + def test_create_file_ok(self):
  92 + self.client.login(username='admin', password = 'testing123')
  93 +
  94 + files = TopicFile.objects.all().count()
  95 + self.assertEqual(TopicFile.objects.all().count(), files) #Macthing no file
  96 +
  97 + topic = Topic.objects.get(name = 'Topic Test')
  98 +
  99 + url = reverse('course:file:create_file', kwargs={'slug': topic.slug})
  100 + data = {
  101 + 'name' : 'testFile',
  102 + "file_url" : self.file
  103 + }
  104 + data['topic'] = topic
  105 +
  106 + # Get modal
  107 + response = self.client.get(url)
  108 + self.assertEqual(response.status_code, 200)
  109 +
  110 + # Create file
  111 + response = self.client.post(url, data)
  112 + file_created = TopicFile.objects.get(name = data['name'])
  113 + self.assertEqual(TopicFile.objects.filter(name= file_created.name).exists(),True)
  114 + self.assertEqual(TopicFile.objects.all().count(), files + 1)
  115 + self.assertEqual(response.status_code, 302)
  116 + self.assertTemplateUsed(template_name = 'files/create_file.html')
  117 +
  118 + def test_update_file_ok(self):
  119 + self.client.login(username='admin', password = 'testing123')
  120 +
  121 + topic = Topic.objects.get(name = 'Topic Test')
  122 +
  123 + # File type
  124 + mime_type = MimeType.objects.create(
  125 + typ = 'image/png',
  126 + icon = 'photo'
  127 + )
  128 + self.file_update = TopicFile.objects.create(
  129 + name = 'testinglink',
  130 + file_url = self.file,
  131 + file_type = mime_type,
  132 + topic = topic
  133 + )
  134 +
  135 + url = reverse('course:file:update_file',kwargs={'slug': self.file_update.slug})
  136 +
  137 + upload_file_update = open('/home/ailson/Pictures/update.png', 'rb')
  138 + new_file = SimpleUploadedFile(upload_file_update.name, upload_file_update.read())
  139 + data = {
  140 + 'name' : 'updated',
  141 + 'file_url': new_file
  142 + }
  143 +
  144 + # Get modal
  145 + response = self.client.get(url)
  146 + self.assertEqual(response.status_code, 200)
  147 +
  148 + response = self.client.post(url, data)
  149 + self.assertEqual(TopicFile.objects.all()[0].name, 'updated') # new file name
  150 + self.assertEqual(response.status_code, 302)
  151 + self.assertTemplateUsed(template_name = 'files/update_file.html')
  152 +
  153 + def test_delete_file(self):
  154 + self.client.login(username='admin', password = 'testing123')
  155 +
  156 + topic = Topic.objects.get(name = 'Topic Test')
  157 +
  158 + # File type
  159 + mime_type = MimeType.objects.create(
  160 + typ = 'image/png',
  161 + icon = 'photo'
  162 + )
  163 + self.file_delete = TopicFile.objects.create(
  164 + name = 'testinglink',
  165 + file_url = self.file,
  166 + file_type = mime_type,
  167 + topic = topic
  168 + )
  169 +
  170 + url = reverse('course:file:delete_file',kwargs={'slug': self.file_delete.slug})
  171 +
  172 + # Get modal
  173 + response = self.client.get(url)
  174 + self.assertEqual(response.status_code, 200)
  175 +
  176 + response = self.client.post(url)
  177 + self.assertEqual(TopicFile.objects.all().count(), 0) # new file name
  178 + self.assertEqual(response.status_code, 302)
  179 + self.assertTemplateUsed(template_name = 'files/delete_file.html')
  180 +
  181 +
  182 +
  183 +
... ...
forum/templates/forum/forum_view.html
1   -{% extends 'base.html' %}
  1 +{% extends 'home.html' %}
2 2  
3 3 {% load static i18n permission_tags list_post %}
4 4 {% load widget_tweaks %}
... ... @@ -21,32 +21,19 @@
21 21 </ol>
22 22 {% endblock %}
23 23  
24   -{% block sidebar %}
25   - <div class="panel panel-primary navigation">
26   - <div class="panel-heading">
27   - <h5>{% trans 'Menu' %}</h5>
28   - </div>
29   - <div class="panel-body">
30   - <ul class="nav nav-pills nav-stacked">
31   - <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li>
32   - <li><a href="{% url 'course:manage' %}">{% trans 'My Courses' %}</a></li>
33   - </ul>
34   - </div>
35   - </div>
36 24  
37   - {% if request.user|has_role:'system_admin' or request.user|has_role:'professor' and request.user in forum.topic.subject.professors.all %}
38   - <div class="panel panel-primary navigation">
39   - <div class="panel-heading">
40   - <h3 class="panel-title">{% trans 'Actions' %}</h3>
41   - </div>
42   - <div class="panel-body">
43   - <ul class="nav nav-pills nav-stacked">
44   - <li><a href="javascript:editForum('{% url 'course:forum:update' forum.id %}', '{{ forum.id }}', '{% trans 'Forum edited successfully!' %}')">{% trans 'Edit' %}</a></li>
45   - <li><a href="javascript:delete_forum('{% url 'course:forum:delete' forum.id %}', '{{ forum.id }}', '{% trans "Are you sure you want to delete this forum?" %}', '{% url 'course:view_subject' forum.topic.subject.slug %}')">{% trans 'Delete' %}</a></li>
46   - </ul>
47   - </div>
  25 +{% block menu %}
  26 + {% if user|has_role:'system_admin' or user|has_role:'professor'%}
  27 + <li>
  28 + <a href="#menu_forum" class="accordion" data-toggle="collapse">{% trans 'Forum' %}<span class="pull-right glyphicon glyphicon-chevron-down"></span></a>
  29 + <div id="menu_forum" class="collapse">
  30 + <ul class="nav nav-pill nav-stacked accordion_list">
  31 + <li><a href="javascript:editForum('{% url 'course:forum:update' forum.id %}', '{{ forum.id }}', '{% trans 'Forum edited successfully!' %}')">{% trans 'Edit' %}</a></li>
  32 + <li><a href="javascript:delete_forum('{% url 'course:forum:delete' forum.id %}', '{{ forum.id }}', '{% trans "Are you sure you want to delete this forum?" %}', '{% url 'course:view_subject' forum.topic.subject.slug %}')">{% trans 'Delete' %}</a></li>
  33 + </ul>
48 34 </div>
49   - {% endif %}
  35 + </li>
  36 + {% endif %}
50 37 {% endblock %}
51 38  
52 39 {% block content %}
... ... @@ -130,4 +117,3 @@
130 117 </div>
131 118 </div>
132 119 {% endblock %}
133   -
... ...
poll/templates/poll/create.html
... ... @@ -144,7 +144,7 @@
144 144 <div class="modal-footer">
145 145  
146 146 <!-- Don't remove that!!! -->
147   - <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Close" %}</button>
  147 + <button type="button" class="btn btn-default btn-raised" data-dismiss="modal">{% trans "Close" %}</button>
148 148 {% block button_save %}
149 149 <!-- Put curtom buttons here!!! -->
150 150 <button type="submite" id="button" form="form" class="btn btn-primary btn-raised">{% trans "Create" %}</button>
... ...
users/templates/list_users.html
... ... @@ -9,23 +9,11 @@
9 9  
10 10 {% endblock %}
11 11  
12   -{% if user|has_role:'system_admin' %}
13   - {% block sidebar %}
14   - <div class="panel panel-primary navigation">
15   - <div class="panel-heading">
16   - <h5>{% trans 'Menu' %}</h5>
17   - </div>
18   - <div class="panel-body">
19   - <ul class="nav nav-pills nav-stacked">
20   - <li><a href="{% url 'core:home' %}">{% trans "Home" %}</a></li>
21   - <li><a href="{% url 'users:create' %}">{% trans 'Add user' %}</a></li>
22   - <li><a href="javascript:void(0)">{% trans 'Send email' %}</a></li>
23   - </ul>
24   - </div>
25   - </div>
26   - {% endblock %}
27   -{% endif %}
28   -
  12 +{% block menu %}
  13 + {% if user|has_role:'system_admin' %}
  14 + <li> <a href="{% url 'users:create' %}">{% trans 'Add User' %}</a></li>
  15 + {% endif %}
  16 +{% endblock %}
29 17  
30 18 {% block content %}
31 19 {% if messages %}
... ... @@ -73,7 +61,7 @@
73 61 <p>{% trans 'Contact' %}: {{ acc.phone }}</p>
74 62 <div align="right">
75 63 <a href="{% url 'users:update' acc.username %}" class="btn btn-raised btn-success">{% trans 'Edit' %}</a>
76   - <a href="javascript:void(0)" class="btn btn-danger btn-raised btn-lg" data-toggle="modal" data-target="#DeleteModal{{ forloop.counter }}">{% trans 'Delete' %}</a>
  64 + <a href="javascript:void(0)" class="btn btn-default btn-raised btn-lg" data-toggle="modal" data-target="#DeleteModal{{ forloop.counter }}">{% trans 'Delete' %}</a>
77 65 </div>
78 66 </div>
79 67  
... ... @@ -90,7 +78,7 @@
90 78 {% trans 'Are you sure you want to delete the user' %} <b>{{acc.name}}</b>?
91 79 </div>
92 80 <div class="modal-footer">
93   - <a href="#" class="btn btn-raised btn-danger" data-dismiss="modal">{% trans 'Cancel' %}</a>
  81 + <a href="#" class="btn btn-raised btn-default" data-dismiss="modal">{% trans 'Cancel' %}</a>
94 82 <a href="{% url 'users:delete' acc.username %}" class="btn btn-raised btn-success" style="margin-top: 0">{% trans 'Delete' %}</a>
95 83 </div>
96 84 </div>
... ... @@ -108,4 +96,3 @@
108 96 </div>
109 97 {% endif %}
110 98 {% endblock %}
111   -
... ...
users/templates/users/change_password.html
... ... @@ -44,7 +44,7 @@
44 44 <input type="submit" value="{% trans 'Save' %}" class="btn btn-raised btn-block btn-success" />
45 45 </div>
46 46 <div class="col-md-3 col-sm-2 col-xs-2">
47   - <a href="{% url 'users:profile' %}" class="btn btn-raised btn-block btn-danger" >{% trans 'Cancel' %}</a>
  47 + <a href="{% url 'users:profile' %}" class="btn btn-raised btn-block btn-default" >{% trans 'Cancel' %}</a>
48 48 </div>
49 49 </div>
50 50 </form>
... ...
users/templates/users/edit_profile.html
... ... @@ -99,7 +99,7 @@
99 99 <input type="submit" value="{% trans 'Save' %}" class="btn btn-raised btn-success" />
100 100 </div>
101 101 <div class="col-md-offset-3 col-md-2 col-sm-2 col-xs-2">
102   - <a href="{% url 'users:profile' %}" class="btn btn-raised btn-danger" >{% trans 'Cancel' %}</a>
  102 + <a href="{% url 'users:profile' %}" class="btn btn-raised btn-default" >{% trans 'Cancel' %}</a>
103 103 </div>
104 104 </form>
105 105 </div>
... ...
users/templates/users/index.html
1   -{% extends 'app/base.html' %}
  1 +{% extends 'home.html' %}
2 2  
3 3 {% load static i18n %}
4 4  
... ... @@ -9,18 +9,8 @@
9 9 </ol>
10 10 {% endblock %}
11 11  
12   -{% block sidebar %}
13   - <div class="list-group">
14   - <a href="{% url 'users:manage' %}" class="list-group-item active">
15   - {% trans 'System Users' %}
16   - </a>
17   - <a href="{% url 'users:create' %}" class="list-group-item">
18   - {% trans 'New Account' %}
19   - </a>
20   - <a href="#" class="list-group-item">
21   - {% trans 'Send Mail' %}
22   - </a>
23   - </div>
  12 +{% block menu %}
  13 + <li> <a href="{% url 'users:create' %}">{% trans 'Add User' %}</a></li>
24 14 {% endblock %}
25 15  
26 16 {% block content %}
... ...
users/templates/users/profile.html
1   -{% extends 'home_student.html' %}
  1 +{% extends 'home.html' %}
2 2  
3 3 {% load static i18n %}
4 4 {% load widget_tweaks %}
5   -{% load django_bootstrap_breadcrumbs %}
  5 +{% load django_bootstrap_breadcrumbs permission_tags%}
6 6  
7 7 {% block breadcrumbs %}
8 8  
... ... @@ -11,21 +11,10 @@
11 11  
12 12 {% endblock %}
13 13  
14   -{% block sidebar %}
15   - <div class="panel panel-primary navigation">
16   - <div class="panel-heading">
17   - <h4>{% trans "Menu" %}</h4>
18   - </div>
19   - <div class="panel-body">
20   - <ul class="nav nav-pills nav-stacked">
21   - <li><a href="{% url 'app:index' %}">{% trans 'Home page' %}</a></li>
22   - <li><a href="{% url 'users:profile' %}">{% trans 'View Profile' %}</a></li>
23   - <li><a href="{% url 'users:update_profile' %}">{% trans 'Edit Profile' %}</a></li>
24   - <li><a href="{% url 'users:change_password' %}">{% trans 'Change Password' %}</a></li>
25   - <li><a href="{% url 'users:remove_account' %}">{% trans 'Remove account' %}</a></li>
26   - </ul>
27   - </div>
28   - </div>
  14 +{% block menu %}
  15 + {% if user|has_role:'system_admin' %}
  16 + <li> <a href="{% url 'users:create' %}">{% trans 'Add User' %}</a></li>
  17 + {% endif %}
29 18 {% endblock %}
30 19  
31 20 {% block content %}
... ...
users/templates/users/remove_account.html
... ... @@ -32,7 +32,7 @@
32 32 <a href="{% url 'users:remove' user.username %}" class="btn btn-raised btn-block btn-success" >{% trans 'Remove' %}</a>
33 33 </div>
34 34 <div class="col-md-3 col-sm-2 col-xs-2">
35   - <a href="{% url 'users:profile' %}" class="btn btn-raised btn-block btn-danger" >{% trans 'Cancel' %}</a>
  35 + <a href="{% url 'users:profile' %}" class="btn btn-raised btn-block btn-default" >{% trans 'Cancel' %}</a>
36 36 </div>
37 37 </div>
38 38 </div>
... ...
users/templates/users/update.html
... ... @@ -6,10 +6,10 @@
6 6 {% load django_bootstrap_breadcrumbs %}
7 7  
8 8 {% block breadcrumbs %}
9   -
  9 +
10 10 {{ block.super }}
11 11 {% breadcrumb 'Update User' 'users:update' %}
12   -
  12 +
13 13 {% endblock %}
14 14  
15 15  
... ... @@ -80,7 +80,7 @@
80 80 <input type="submit" value="{% trans 'Save' %}" class="btn btn-raised btn-success" />
81 81 </div>
82 82 <div class="col-md-offset-3 col-md-2 col-sm-2 col-xs-2">
83   - <a href="{% url 'users:manage' %}" class="btn btn-raised btn-danger" >{% trans 'Cancel' %}</a>
  83 + <a href="{% url 'users:manage' %}" class="btn btn-raised btn-default" >{% trans 'Cancel' %}</a>
84 84 </div>
85 85 </form>
86 86 </div>
... ...
users/templates/users/view.html
1   -{% extends 'app/base.html' %}
  1 +{% extends 'users/profile.html' %}
2 2  
3 3 {% load static i18n %}
4 4  
... ... @@ -9,26 +9,6 @@
9 9 </ol>
10 10 {% endblock %}
11 11  
12   -{% block sidebar %}
13   - <div class="list-group">
14   - <a href="{% url 'users:manage' %}" class="list-group-item">
15   - {% trans 'System Users' %}
16   - </a>
17   - <a href="{% url 'users:create' %}" class="list-group-item">
18   - {% trans 'New Account' %}
19   - </a>
20   - <a href="{% url 'users:view' acc.username %}" class="list-group-item active">
21   - {% trans 'View User Account' %}
22   - </a>
23   - <a href="{% url 'users:update' acc.username %}" class="list-group-item">
24   - {% trans 'Edit User Account' %}
25   - </a>
26   - <a href="#" class="list-group-item">
27   - {% trans 'Send Mail' %}
28   - </a>
29   - </div>
30   -{% endblock %}
31   -
32 12 {% block content %}
33 13 <div class="row">
34 14 <div class="col-sm-3">
... ...