Commit 71559f2308153bfbff407b8c173a0a6cae270b1e
Committed by
GitHub
Exists in
master
and in
5 other branches
Merge pull request #239 from amadeusproject/dev
Update from Sprint VII
Showing
126 changed files
with
4604 additions
and
2296 deletions
Show diff stats
amadeus/settings.py
amadeus/staticfiles/css/base/amadeus.css
@@ -18,9 +18,6 @@ | @@ -18,9 +18,6 @@ | ||
18 | padding-bottom: 1%; | 18 | padding-bottom: 1%; |
19 | width: 15%; | 19 | width: 15%; |
20 | } | 20 | } |
21 | -.navigation{ | ||
22 | - margin: 10% 10% 5% 5%; | ||
23 | -} | ||
24 | .breadcrumb{ | 21 | .breadcrumb{ |
25 | margin-bottom: 5px; | 22 | margin-bottom: 5px; |
26 | } | 23 | } |
@@ -320,4 +317,4 @@ body .container .jumbotron-inverse, body .container .well-inverse, body .contain | @@ -320,4 +317,4 @@ body .container .jumbotron-inverse, body .container .well-inverse, body .contain | ||
320 | 317 | ||
321 | .notification-count { | 318 | .notification-count { |
322 | background-color: #FF0000; | 319 | background-color: #FF0000; |
323 | -} | 320 | -} |
321 | +} | ||
324 | \ No newline at end of file | 322 | \ No newline at end of file |
amadeus/uploads/ciencia-da-computacao/teorica/tipfef/Apresentacao_da_Cadidatura_a_Marketing_-_Matheus_Lins.pptx
0 → 100644
No preview for this file type
amadeus/uploads/ciencia-da-computacao/teorica/tipfef/Cartao_Outubro.pdf
0 → 100644
No preview for this file type
amadeus/uploads/sistemas-de-informacao/algoritmo/topico-1/Riachuelo_Outubro.pdf
0 → 100644
No preview for this file type
@@ -0,0 +1,17 @@ | @@ -0,0 +1,17 @@ | ||
1 | +from django import forms | ||
2 | +from .models import EmailBackend | ||
3 | +from django.utils.translation import ugettext_lazy as _ | ||
4 | + | ||
5 | +class EmailBackendForm(forms.ModelForm): | ||
6 | + | ||
7 | + class Meta: | ||
8 | + model = EmailBackend | ||
9 | + fields = ('description', 'host', 'port', 'username', 'password', 'safe_conection', 'default_from_email') | ||
10 | + help_texts = { | ||
11 | + 'host': _('A host name. Example: smtp.gmail.com'), | ||
12 | + 'port': _('A port number'), | ||
13 | + 'usermane': _('Your host username'), | ||
14 | + 'password': _('Your host password'), | ||
15 | + } | ||
16 | + | ||
17 | + | ||
0 | \ No newline at end of file | 18 | \ No newline at end of file |
app/locale/he_il/LC_MESSAGES/django.po
@@ -1,178 +0,0 @@ | @@ -1,178 +0,0 @@ | ||
1 | -# SOME DESCRIPTIVE TITLE. | ||
2 | -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||
3 | -# This file is distributed under the same license as the PACKAGE package. | ||
4 | -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||
5 | -# | ||
6 | -#, fuzzy | ||
7 | -msgid "" | ||
8 | -msgstr "" | ||
9 | -"Project-Id-Version: PACKAGE VERSION\n" | ||
10 | -"Report-Msgid-Bugs-To: \n" | ||
11 | -"POT-Creation-Date: 2016-09-16 02:41-0300\n" | ||
12 | -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||
13 | -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||
14 | -"Language-Team: LANGUAGE <LL@li.org>\n" | ||
15 | -"Language: \n" | ||
16 | -"MIME-Version: 1.0\n" | ||
17 | -"Content-Type: text/plain; charset=UTF-8\n" | ||
18 | -"Content-Transfer-Encoding: 8bit\n" | ||
19 | - | ||
20 | -#: app/templates/app/base.html:10 | ||
21 | -msgid "The Project" | ||
22 | -msgstr "" | ||
23 | - | ||
24 | -#: app/templates/app/base.html:11 | ||
25 | -msgid "CCTE Group" | ||
26 | -msgstr "" | ||
27 | - | ||
28 | -#: app/templates/app/base.html:14 | ||
29 | -msgid "Hi" | ||
30 | -msgstr "" | ||
31 | - | ||
32 | -#: app/templates/app/base.html:16 | ||
33 | -msgid "See Profile" | ||
34 | -msgstr "" | ||
35 | - | ||
36 | -#: app/templates/app/base.html:17 | ||
37 | -msgid "Settings" | ||
38 | -msgstr "" | ||
39 | - | ||
40 | -#: app/templates/app/base.html:18 | ||
41 | -msgid "Logout" | ||
42 | -msgstr "" | ||
43 | - | ||
44 | -#: app/templates/app/index.html:6 | ||
45 | -msgid "You have:" | ||
46 | -msgstr "" | ||
47 | - | ||
48 | -#: app/templates/app/index.html:10 app/templates/home.html:88 | ||
49 | -msgid "Pending Tasks" | ||
50 | -msgstr "" | ||
51 | - | ||
52 | -#: app/templates/app/index.html:14 | ||
53 | -msgid "Users Online" | ||
54 | -msgstr "" | ||
55 | - | ||
56 | -#: app/templates/app/index.html:20 | ||
57 | -msgid "You can:" | ||
58 | -msgstr "" | ||
59 | - | ||
60 | -#: app/templates/app/index.html:24 app/templates/home_professor.html:25 | ||
61 | -msgid "Create Course" | ||
62 | -msgstr "" | ||
63 | - | ||
64 | -#: app/templates/app/index.html:29 app/templates/home.html:93 | ||
65 | -msgid "Manage Users" | ||
66 | -msgstr "" | ||
67 | - | ||
68 | -#: app/templates/app/index.html:33 app/templates/home.html:96 | ||
69 | -msgid "Manage Courses" | ||
70 | -msgstr "" | ||
71 | - | ||
72 | -#: app/templates/app/index.html:37 | ||
73 | -msgid "Gerenciar Categorias" | ||
74 | -msgstr "" | ||
75 | - | ||
76 | -#: app/templates/app/index.html:45 | ||
77 | -msgid "Your course(s):" | ||
78 | -msgstr "" | ||
79 | - | ||
80 | -#: app/templates/app/index.html:46 | ||
81 | -msgid "No courses subscribed yet" | ||
82 | -msgstr "" | ||
83 | - | ||
84 | -#: app/templates/app/index.html:56 | ||
85 | -msgid "Search course:" | ||
86 | -msgstr "" | ||
87 | - | ||
88 | -#: app/templates/app/index.html:62 | ||
89 | -msgid "Search" | ||
90 | -msgstr "" | ||
91 | - | ||
92 | -#: app/templates/app/index.html:67 | ||
93 | -msgid "Most popular keywords:" | ||
94 | -msgstr "" | ||
95 | - | ||
96 | -#: app/templates/home.html:86 | ||
97 | -msgid "Home" | ||
98 | -msgstr "" | ||
99 | - | ||
100 | -#: app/templates/home.html:87 app/templates/home_student.html:25 | ||
101 | -msgid "Profile" | ||
102 | -msgstr "" | ||
103 | - | ||
104 | -#: app/templates/home.html:90 | ||
105 | -msgid "My courses" | ||
106 | -msgstr "" | ||
107 | - | ||
108 | -#: app/templates/home.html:105 app/templates/home_professor.html:33 | ||
109 | -msgid "Courses" | ||
110 | -msgstr "" | ||
111 | - | ||
112 | -#: app/templates/home.html:131 | ||
113 | -msgid "No pending tasks at the moment." | ||
114 | -msgstr "" | ||
115 | - | ||
116 | -#: app/templates/home_admin_content.html:10 | ||
117 | -msgid "Students" | ||
118 | -msgstr "" | ||
119 | - | ||
120 | -#: app/templates/home_admin_content.html:11 | ||
121 | -msgid "Beginning" | ||
122 | -msgstr "" | ||
123 | - | ||
124 | -#: app/templates/home_admin_content.html:12 | ||
125 | -msgid "End" | ||
126 | -msgstr "" | ||
127 | - | ||
128 | -#: app/templates/home_admin_content.html:15 | ||
129 | -msgid "Edit" | ||
130 | -msgstr "" | ||
131 | - | ||
132 | -#: app/templates/home_professor.html:20 app/templates/home_student.html:21 | ||
133 | -msgid "Menu" | ||
134 | -msgstr "" | ||
135 | - | ||
136 | -#: app/templates/home_professor.html:24 | ||
137 | -msgid "Pending tasks" | ||
138 | -msgstr "" | ||
139 | - | ||
140 | -#: app/templates/home_professor.html:26 | ||
141 | -msgid "Manage Course" | ||
142 | -msgstr "" | ||
143 | - | ||
144 | -#: app/templates/home_professor.html:43 | ||
145 | -msgid "Students:" | ||
146 | -msgstr "" | ||
147 | - | ||
148 | -#: app/templates/home_professor.html:44 | ||
149 | -msgid "Beginning:" | ||
150 | -msgstr "" | ||
151 | - | ||
152 | -#: app/templates/home_professor.html:45 | ||
153 | -msgid "End:" | ||
154 | -msgstr "" | ||
155 | - | ||
156 | -#: app/templates/home_professor.html:52 | ||
157 | -msgid "You didn't create any course yet." | ||
158 | -msgstr "" | ||
159 | - | ||
160 | -#: app/templates/home_professor.html:58 app/templates/home_student.html:73 | ||
161 | -msgid "Goals" | ||
162 | -msgstr "" | ||
163 | - | ||
164 | -#: app/templates/home_student.html:26 | ||
165 | -msgid "My Courses" | ||
166 | -msgstr "" | ||
167 | - | ||
168 | -#: app/templates/home_student.html:27 | ||
169 | -msgid "Google accounts" | ||
170 | -msgstr "" | ||
171 | - | ||
172 | -#: app/templates/home_student.html:34 | ||
173 | -msgid "Notifications" | ||
174 | -msgstr "" | ||
175 | - | ||
176 | -#: app/templates/home_student.html:76 | ||
177 | -msgid "Favorites" | ||
178 | -msgstr "" |
app/locale/pt_BR/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid "" | @@ -8,7 +8,7 @@ msgid "" | ||
8 | msgstr "" | 8 | msgstr "" |
9 | "Project-Id-Version: PACKAGE VERSION\n" | 9 | "Project-Id-Version: PACKAGE VERSION\n" |
10 | "Report-Msgid-Bugs-To: \n" | 10 | "Report-Msgid-Bugs-To: \n" |
11 | -"POT-Creation-Date: 2016-09-07 00:13-0300\n" | 11 | +"POT-Creation-Date: 2016-10-26 14:47-0300\n" |
12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | 13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
14 | "Language-Team: LANGUAGE <LL@li.org>\n" | 14 | "Language-Team: LANGUAGE <LL@li.org>\n" |
@@ -18,161 +18,198 @@ msgstr "" | @@ -18,161 +18,198 @@ msgstr "" | ||
18 | "Content-Transfer-Encoding: 8bit\n" | 18 | "Content-Transfer-Encoding: 8bit\n" |
19 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" | 19 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" |
20 | 20 | ||
21 | -#: app/templates/app/base.html:10 | ||
22 | -msgid "The Project" | ||
23 | -msgstr "" | ||
24 | - | ||
25 | -#: app/templates/app/base.html:11 | ||
26 | -msgid "CCTE Group" | ||
27 | -msgstr "" | 21 | +#: app/templates/home.html:69 app/templates/home_professor.html:20 |
22 | +#: app/templates/home_student.html:21 | ||
23 | +msgid "Menu" | ||
24 | +msgstr "Menu" | ||
28 | 25 | ||
29 | -#: app/templates/app/base.html:14 | ||
30 | -msgid "Hi" | ||
31 | -msgstr "" | 26 | +#: app/templates/home.html:73 |
27 | +msgid "Home" | ||
28 | +msgstr "Início" | ||
32 | 29 | ||
33 | -#: app/templates/app/base.html:16 | ||
34 | -#, fuzzy | ||
35 | -#| msgid "Profile" | ||
36 | -msgid "See Profile" | 30 | +#: app/templates/home.html:74 app/templates/home_student.html:25 |
31 | +msgid "Profile" | ||
37 | msgstr "Perfil" | 32 | msgstr "Perfil" |
38 | 33 | ||
39 | -#: app/templates/app/base.html:17 | ||
40 | -msgid "Settings" | ||
41 | -msgstr "Configurações" | ||
42 | - | ||
43 | -#: app/templates/app/base.html:18 | ||
44 | -msgid "Logout" | ||
45 | -msgstr "Sair" | ||
46 | - | ||
47 | -#: app/templates/app/index.html:6 | ||
48 | -msgid "You have:" | ||
49 | -msgstr "" | ||
50 | - | ||
51 | -#: app/templates/app/index.html:10 | 34 | +#: app/templates/home.html:76 |
52 | #, fuzzy | 35 | #, fuzzy |
53 | -#| msgid "Pending tasks" | ||
54 | -msgid "Pending Tasks" | ||
55 | -msgstr "Tarefas Pendentes" | ||
56 | - | ||
57 | -#: app/templates/app/index.html:14 | ||
58 | -msgid "Users Online" | ||
59 | -msgstr "Usuários Online" | ||
60 | - | ||
61 | -#: app/templates/app/index.html:20 | ||
62 | -msgid "You can:" | ||
63 | -msgstr "" | 36 | +#| msgid "My Courses" |
37 | +msgid "My courses" | ||
38 | +msgstr "Meus Cursos" | ||
64 | 39 | ||
65 | -#: app/templates/app/index.html:24 app/templates/home_app.html:26 | ||
66 | -#: app/templates/home_professor.html:23 | ||
67 | -msgid "Create Course" | ||
68 | -msgstr "Criar Curso" | 40 | +#: app/templates/home.html:78 app/templates/home_student.html:27 |
41 | +#, fuzzy | ||
42 | +#| msgid "Courses" | ||
43 | +msgid "All Courses" | ||
44 | +msgstr "Cursos" | ||
69 | 45 | ||
70 | -#: app/templates/app/index.html:29 | 46 | +#: app/templates/home.html:80 |
71 | #, fuzzy | 47 | #, fuzzy |
72 | #| msgid "Manage Course" | 48 | #| msgid "Manage Course" |
73 | msgid "Manage Users" | 49 | msgid "Manage Users" |
74 | -msgstr "Gerenciar Curso" | 50 | +msgstr "Gerenciar Usuários" |
75 | 51 | ||
76 | -#: app/templates/app/index.html:33 | 52 | +#: app/templates/home.html:84 |
77 | #, fuzzy | 53 | #, fuzzy |
78 | #| msgid "Manage Course" | 54 | #| msgid "Manage Course" |
79 | msgid "Manage Courses" | 55 | msgid "Manage Courses" |
80 | -msgstr "Gerenciar Curso" | ||
81 | - | ||
82 | -#: app/templates/app/index.html:37 | ||
83 | -msgid "Gerenciar Categorias" | ||
84 | -msgstr "" | ||
85 | - | ||
86 | -#: app/templates/app/index.html:45 | ||
87 | -msgid "Your course(s):" | ||
88 | -msgstr "" | 56 | +msgstr "Gerenciar Cursos" |
89 | 57 | ||
90 | -#: app/templates/app/index.html:46 | ||
91 | -msgid "No courses subscribed yet" | ||
92 | -msgstr "" | 58 | +#: app/templates/home.html:101 app/templates/home_professor.html:34 |
59 | +msgid "Courses" | ||
60 | +msgstr "Cursos" | ||
93 | 61 | ||
94 | -#: app/templates/app/index.html:56 | ||
95 | -msgid "Search course:" | ||
96 | -msgstr "" | 62 | +#: app/templates/home_admin_content.html:10 |
63 | +#, fuzzy | ||
64 | +#| msgid "Students:" | ||
65 | +msgid "Students" | ||
66 | +msgstr "Alunos" | ||
97 | 67 | ||
98 | -#: app/templates/app/index.html:62 | ||
99 | -msgid "Search" | ||
100 | -msgstr "" | 68 | +#: app/templates/home_admin_content.html:11 |
69 | +#, fuzzy | ||
70 | +#| msgid "Beginning:" | ||
71 | +msgid "Beginning" | ||
72 | +msgstr "Começo" | ||
101 | 73 | ||
102 | -#: app/templates/app/index.html:67 | ||
103 | -msgid "Most popular keywords:" | ||
104 | -msgstr "" | 74 | +#: app/templates/home_admin_content.html:12 |
75 | +#, fuzzy | ||
76 | +#| msgid "End:" | ||
77 | +msgid "End" | ||
78 | +msgstr "Fim:" | ||
105 | 79 | ||
106 | -#: app/templates/home_app.html:14 app/templates/home_professor.html:9 | ||
107 | -#: app/templates/home_student.html:9 | ||
108 | -msgid "Home" | ||
109 | -msgstr "Início" | 80 | +#: app/templates/home_admin_content.html:15 |
81 | +msgid "Edit" | ||
82 | +msgstr "Editar" | ||
110 | 83 | ||
111 | -#: app/templates/home_app.html:22 app/templates/home_professor.html:22 | 84 | +#: app/templates/home_professor.html:24 |
112 | msgid "Pending tasks" | 85 | msgid "Pending tasks" |
113 | msgstr "Tarefas Pendentes" | 86 | msgstr "Tarefas Pendentes" |
114 | 87 | ||
115 | -#: app/templates/home_app.html:23 | ||
116 | -#, fuzzy | ||
117 | -#| msgid "Users Online" | ||
118 | -msgid "Users Online (1)" | ||
119 | -msgstr "Usuários Online" | ||
120 | - | ||
121 | -#: app/templates/home_app.html:24 | ||
122 | -#, fuzzy | ||
123 | -#| msgid "Courses" | ||
124 | -msgid "Course" | ||
125 | -msgstr "Cursos" | 88 | +#: app/templates/home_professor.html:25 |
89 | +msgid "Create Course" | ||
90 | +msgstr "Criar Curso" | ||
126 | 91 | ||
127 | -#: app/templates/home_app.html:27 app/templates/home_professor.html:24 | 92 | +#: app/templates/home_professor.html:26 |
128 | msgid "Manage Course" | 93 | msgid "Manage Course" |
129 | msgstr "Gerenciar Curso" | 94 | msgstr "Gerenciar Curso" |
130 | 95 | ||
131 | -#: app/templates/home_app.html:35 app/templates/home_professor.html:31 | ||
132 | -msgid "Courses" | ||
133 | -msgstr "Cursos" | ||
134 | - | ||
135 | -#: app/templates/home_app.html:51 app/templates/home_professor.html:48 | ||
136 | -msgid "You didn't create any course yet." | ||
137 | -msgstr "Você não criou nenhum curso ainda." | ||
138 | - | ||
139 | -#: app/templates/home_app.html:59 app/templates/home_professor.html:54 | ||
140 | -#: app/templates/home_student.html:60 | ||
141 | -msgid "Goals" | ||
142 | -msgstr "Metas" | ||
143 | - | ||
144 | -#: app/templates/home_professor.html:18 app/templates/home_student.html:18 | ||
145 | -msgid "Menu" | ||
146 | -msgstr "Menu" | ||
147 | - | ||
148 | -#: app/templates/home_professor.html:40 | 96 | +#: app/templates/home_professor.html:44 |
149 | msgid "Students:" | 97 | msgid "Students:" |
150 | msgstr "Alunos" | 98 | msgstr "Alunos" |
151 | 99 | ||
152 | -#: app/templates/home_professor.html:41 | 100 | +#: app/templates/home_professor.html:45 |
153 | msgid "Beginning:" | 101 | msgid "Beginning:" |
154 | msgstr "Começo" | 102 | msgstr "Começo" |
155 | 103 | ||
156 | -#: app/templates/home_professor.html:42 | 104 | +#: app/templates/home_professor.html:46 |
157 | msgid "End:" | 105 | msgid "End:" |
158 | -msgstr "Fim" | 106 | +msgstr "Fim:" |
159 | 107 | ||
160 | -#: app/templates/home_student.html:22 | ||
161 | -msgid "Profile" | ||
162 | -msgstr "Perfil" | 108 | +#: app/templates/home_professor.html:53 |
109 | +msgid "You didn't create any course yet." | ||
110 | +msgstr "Você não criou nenhum curso ainda." | ||
163 | 111 | ||
164 | -#: app/templates/home_student.html:23 | 112 | +#: app/templates/home_student.html:26 |
165 | msgid "My Courses" | 113 | msgid "My Courses" |
166 | msgstr "Meus Cursos" | 114 | msgstr "Meus Cursos" |
167 | 115 | ||
168 | -#: app/templates/home_student.html:24 | 116 | +#: app/templates/home_student.html:28 |
169 | msgid "Google accounts" | 117 | msgid "Google accounts" |
170 | msgstr "Contas do Google" | 118 | msgstr "Contas do Google" |
171 | 119 | ||
172 | -#: app/templates/home_student.html:31 | 120 | +#: app/templates/home_student.html:35 |
173 | msgid "Notifications" | 121 | msgid "Notifications" |
174 | msgstr "Notificações" | 122 | msgstr "Notificações" |
175 | 123 | ||
176 | -#: app/templates/home_student.html:63 | ||
177 | -msgid "Favorites" | ||
178 | -msgstr "Favoritos" | 124 | +#: app/templates/home_student.html:48 |
125 | +msgid "His course has notified a new activity!" | ||
126 | +msgstr "Seu curso tem uma nova atividade!" | ||
127 | + | ||
128 | +#: app/templates/home_student.html:51 app/templates/home_student.html:59 | ||
129 | +#: app/templates/home_student.html:67 | ||
130 | +msgid "Go" | ||
131 | +msgstr "Ir" | ||
132 | + | ||
133 | +#: app/templates/home_student.html:56 | ||
134 | +msgid "His teacher has notified a new material!" | ||
135 | +msgstr "Seu professor adicionou um novo material!" | ||
136 | + | ||
137 | +#: app/templates/home_student.html:64 | ||
138 | +msgid "You have a new guardian!" | ||
139 | +msgstr "Você tem um novo tutor!" | ||
140 | + | ||
141 | +#: app/templates/home_teacher_student_content.html:14 | ||
142 | +msgid "at" | ||
143 | +msgstr "em" | ||
144 | + | ||
145 | +#: app/templates/home_teacher_student_content.html:15 | ||
146 | +msgid "ago" | ||
147 | +msgstr "atrás" | ||
148 | + | ||
149 | +#~ msgid "The Project" | ||
150 | +#~ msgstr "O projeto" | ||
151 | + | ||
152 | +#~ msgid "CCTE Group" | ||
153 | +#~ msgstr "Grupo CCTE" | ||
154 | + | ||
155 | +#~ msgid "Hi" | ||
156 | +#~ msgstr "Olá" | ||
157 | + | ||
158 | +#, fuzzy | ||
159 | +#~| msgid "Profile" | ||
160 | +#~ msgid "See Profile" | ||
161 | +#~ msgstr "Perfil" | ||
162 | + | ||
163 | +#~ msgid "Settings" | ||
164 | +#~ msgstr "Configurações" | ||
165 | + | ||
166 | +#~ msgid "Logout" | ||
167 | +#~ msgstr "Sair" | ||
168 | + | ||
169 | +#~ msgid "You have:" | ||
170 | +#~ msgstr "Você tem:" | ||
171 | + | ||
172 | +#, fuzzy | ||
173 | +#~| msgid "Pending tasks" | ||
174 | +#~ msgid "Pending Tasks" | ||
175 | +#~ msgstr "Tarefas Pendentes" | ||
176 | + | ||
177 | +#~ msgid "Users Online" | ||
178 | +#~ msgstr "Usuários Online" | ||
179 | + | ||
180 | +#~ msgid "You can:" | ||
181 | +#~ msgstr "Você pode:" | ||
182 | + | ||
183 | +#~ msgid "Manage Categories" | ||
184 | +#~ msgstr "Gerenciar Categorias" | ||
185 | + | ||
186 | +#~ msgid "Your course(s):" | ||
187 | +#~ msgstr "Seus cursos:" | ||
188 | + | ||
189 | +#~ msgid "No courses subscribed yet" | ||
190 | +#~ msgstr "Nenhum curso inscrito ainda" | ||
191 | + | ||
192 | +#~ msgid "Search course:" | ||
193 | +#~ msgstr "Pesquisar curso" | ||
194 | + | ||
195 | +#~ msgid "Search" | ||
196 | +#~ msgstr "Pesquisar" | ||
197 | + | ||
198 | +#~ msgid "Most popular keywords:" | ||
199 | +#~ msgstr "Palavras mais populares:" | ||
200 | + | ||
201 | +#, fuzzy | ||
202 | +#~| msgid "Users Online" | ||
203 | +#~ msgid "Users Online (1)" | ||
204 | +#~ msgstr "Usuários Online" | ||
205 | + | ||
206 | +#, fuzzy | ||
207 | +#~| msgid "Courses" | ||
208 | +#~ msgid "Course" | ||
209 | +#~ msgstr "Cursos" | ||
210 | + | ||
211 | +#~ msgid "Goals" | ||
212 | +#~ msgstr "Metas" | ||
213 | + | ||
214 | +#~ msgid "Favorites" | ||
215 | +#~ msgstr "Favoritos" |
app/models.py
1 | from django.db import models | 1 | from django.db import models |
2 | - | 2 | +from django.utils.translation import ugettext_lazy as _ |
3 | # Create your models here. | 3 | # Create your models here. |
4 | + | ||
5 | +class EmailBackend(models.Model): | ||
6 | + | ||
7 | + SAFE_CONECTIONS = ( | ||
8 | + (0, _('No')), | ||
9 | + (1, _('TLS, if available')), | ||
10 | + (2, 'TLS'), | ||
11 | + (3, 'SSL'), | ||
12 | + | ||
13 | + ) | ||
14 | + description = models.CharField(_('Description'), max_length=100) | ||
15 | + host = models.URLField(_('E-mail Host')) | ||
16 | + port = models.CharField(_('Email Port'), max_length=4, blank=True) | ||
17 | + username = models.CharField(_('Email host username'), max_length=30) | ||
18 | + password = models.CharField(_('Email host password'), max_length=30, blank=True) | ||
19 | + safe_conection = models.IntegerField(_('Use safe conection'), choices=SAFE_CONECTIONS, default=0) | ||
20 | + default_from_email = models.EmailField(_('Default from email'), blank=True) | ||
21 | + | ||
22 | + class Meta: | ||
23 | + verbose_name = _('Amadeus SMTP setting') | ||
24 | + verbose_name_plural = _('Amadeus SMTP settings') | ||
25 | + | ||
26 | + def __str__(self): | ||
27 | + return _('Custom email Backend') |
@@ -0,0 +1,135 @@ | @@ -0,0 +1,135 @@ | ||
1 | +{% extends "home.html" %} | ||
2 | + | ||
3 | +{% load static i18n django_bootstrap_breadcrumbs permission_tags %} | ||
4 | + | ||
5 | +{% block breadcrumbs %} | ||
6 | + {{ block.super }} | ||
7 | + {% breadcrumb 'Settings' 'app:settings' %} | ||
8 | +{% endblock %} | ||
9 | + | ||
10 | +{% block content %} | ||
11 | + <!-- Nav tabs --> | ||
12 | + <ul class="nav nav-tabs md-pills pills-ins" role="tablist"> | ||
13 | + <li class="nav-item"> | ||
14 | + <a class="nav-link active" data-toggle="tab" href="#panel1" role="tab"><i class="fa fa-cog"></i> System</a> | ||
15 | + </li> | ||
16 | + <li class="nav-item"> | ||
17 | + <a class="nav-link" data-toggle="tab" href="#panel2" role="tab"><i class="fa fa-envelope"></i> Mail Sender</a> | ||
18 | + </li> | ||
19 | + <li class="nav-item"> | ||
20 | + <a class="nav-link" data-toggle="tab" href="#panel3" role="tab"><i class="fa fa-lock"></i> Security</a> | ||
21 | + </li> | ||
22 | + </ul> | ||
23 | + | ||
24 | + <!-- Tab panels --> | ||
25 | + <div class="tab-content"> | ||
26 | + <!--Panel 1--> | ||
27 | + <div class="tab-pane fade in active" id="panel1" role="tabpanel"> | ||
28 | + <div class="panel panel-default"> | ||
29 | + <div class="panel-body"> | ||
30 | + <h3><b>General</b></h3> | ||
31 | + <div class="panel panel-default"> | ||
32 | + <div class="panel-body"> | ||
33 | + Content | ||
34 | + <hr> | ||
35 | + </div> | ||
36 | + </div> | ||
37 | + </div> | ||
38 | + </div> | ||
39 | + </div> | ||
40 | + <!--/.Panel 1--> | ||
41 | + | ||
42 | + <!--Panel 2--> | ||
43 | + <div class="tab-pane fade" id="panel2" role="tabpanel"> | ||
44 | + <div class="panel panel-default"> | ||
45 | + <div class="panel-body"> | ||
46 | + <h3><b>Outgoing Server (SMTP)</b></h3> | ||
47 | + <div class="panel panel-default"> | ||
48 | + <div class="panel-body"> | ||
49 | + <h4><b>Settings</b></b></h4> | ||
50 | + <hr> | ||
51 | + <div class="form-group label-floating"> | ||
52 | + <label class="control-label" for="focusedInput1">Description</label> | ||
53 | + <input class="form-control" id="focusedInput1" type="text"> | ||
54 | + </div> | ||
55 | + <div class="form-group label-floating"> | ||
56 | + <label class="control-label" for="focusedInput1">Server</label> | ||
57 | + <input class="form-control" id="focusedInput1" type="text"> | ||
58 | + </div> | ||
59 | + <div class="form-group label-floating"> | ||
60 | + <label for="number" class="col-md_10 control-label">Port</label> | ||
61 | + <div class="col-md-2"> | ||
62 | + <input type="number" class="form-control" id="inputNumber"> | ||
63 | + </div> | ||
64 | + <div> | ||
65 | + <label for="number">Deafault:</label> 25 | ||
66 | + </div> | ||
67 | + </div> | ||
68 | + </div> | ||
69 | + </div> | ||
70 | + </div> | ||
71 | + <div class="panel-body"> | ||
72 | + <div class="panel panel-default"> | ||
73 | + <div class="panel-body"> | ||
74 | + <h4><b>Security and Authentication</b></h4> | ||
75 | + <hr> | ||
76 | + <div class="form-group label-floating"> | ||
77 | + <label class="control-label" for="focusedInput1">User Name</label> | ||
78 | + <input class="form-control" id="focusedInput1" type="text"> | ||
79 | + </div> | ||
80 | + <div class="form-group label-floating"> | ||
81 | + <label class="control-label" for="focusedInput1">Password</label> | ||
82 | + <input class="form-control" id="focusedInput1" type="password"> | ||
83 | + </div> | ||
84 | + <div class="form-group"> | ||
85 | + <p><b>Use safe contection</b></p> | ||
86 | + <div class="col-md-10"> | ||
87 | + <div class="radio radio-primary"> | ||
88 | + <label> | ||
89 | + <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1"> | ||
90 | + No | ||
91 | + </label> | ||
92 | + <label> | ||
93 | + <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2"> | ||
94 | + TSL, If available | ||
95 | + </label> | ||
96 | + <label> | ||
97 | + <input type="radio" name="optionsRadios" id="optionsRadios3" value="option3"> | ||
98 | + TSL | ||
99 | + </label> | ||
100 | + <label> | ||
101 | + <input type="radio" name="optionsRadios" id="optionsRadios4" value="option4" checked=""> | ||
102 | + SSL | ||
103 | + </label> | ||
104 | + </div> | ||
105 | + </div> | ||
106 | + </div> | ||
107 | + </div> | ||
108 | + </div> | ||
109 | + <button type="button" class="btn btn-success btn-raised">Save changes</button> | ||
110 | + </div> | ||
111 | + </div> | ||
112 | + </div> | ||
113 | + | ||
114 | + <!--/.Panel 2--> | ||
115 | + | ||
116 | + <!--Panel 3--> | ||
117 | + <div class="tab-pane fade" id="panel3" role="tabpanel"> | ||
118 | + <div class="panel panel-default"> | ||
119 | + <div class="panel-body"> | ||
120 | + <div class="togglebutton"> | ||
121 | + <label> | ||
122 | + <input type="checkbox" checked> <b>Allow users self-enroll.</b> | ||
123 | + </label> | ||
124 | + </div> | ||
125 | + <div class="togglebutton"> | ||
126 | + <label> | ||
127 | + <input type="checkbox"> <b>Put the system in maintenance mode.</b> | ||
128 | + </label> | ||
129 | + </div> | ||
130 | + <button type="button" class="btn btn-primary">Save changes</button> | ||
131 | + </div> | ||
132 | + </div> | ||
133 | + </div> | ||
134 | + </div> | ||
135 | +{% endblock content %} | ||
0 | \ No newline at end of file | 136 | \ No newline at end of file |
app/templates/home.html
@@ -3,55 +3,61 @@ | @@ -3,55 +3,61 @@ | ||
3 | {% load static i18n django_bootstrap_breadcrumbs permission_tags %} | 3 | {% load static i18n django_bootstrap_breadcrumbs permission_tags %} |
4 | 4 | ||
5 | {% block javascript %} | 5 | {% block javascript %} |
6 | - {% if page_obj %} | ||
7 | - <script type="text/javascript"> | ||
8 | - var pageNum = {{ page_obj.number }}; // The latest page loaded | ||
9 | - var numberPages = {{ paginator.num_pages }}; // Indicates the number of pages | ||
10 | - var baseUrl = '{% url "app:index" %}'; | 6 | + {% if page_obj %} |
7 | + <script type="text/javascript"> | ||
8 | + {% if page_obj and paginator %} | ||
9 | + var pageNum = {{ page_obj.number }}; // The latest page loaded | ||
10 | + var numberPages = {{ paginator.num_pages }}; // Indicates the number of pages | ||
11 | + {% else %} | ||
12 | + var pageNum = 0 ; // The latest page loaded | ||
13 | + var numberPages = 0 ; // Indicates the number of pages | ||
14 | + {% endif %} | ||
15 | + | ||
16 | + var baseUrl = '{% url "app:index" %}'; | ||
11 | 17 | ||
12 | - // loadOnScroll handler | ||
13 | - var loadOnScroll = function() { | ||
14 | - // If the current scroll position is past out cutoff point... | ||
15 | - if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) { | ||
16 | - // temporarily unhook the scroll event watcher so we don't call a bunch of times in a row | ||
17 | - $(window).unbind(); | ||
18 | - // execute the load function below that will visit the view and return the content | ||
19 | - loadItems(); | ||
20 | - } | ||
21 | - }; | 18 | + // loadOnScroll handler |
19 | + var loadOnScroll = function() { | ||
20 | + // If the current scroll position is past out cutoff point... | ||
21 | + if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) { | ||
22 | + // temporarily unhook the scroll event watcher so we don't call a bunch of times in a row | ||
23 | + $(window).unbind(); | ||
24 | + // execute the load function below that will visit the view and return the content | ||
25 | + loadItems(); | ||
26 | + } | ||
27 | + }; | ||
22 | 28 | ||
23 | - var loadItems = function() { | ||
24 | - // Check if page is equal to the number of pages | ||
25 | - if (pageNum == numberPages) { | ||
26 | - return false | ||
27 | - } | ||
28 | - // Update the page number | ||
29 | - pageNum = pageNum + 1; | 29 | + var loadItems = function() { |
30 | + // Check if page is equal to the number of pages | ||
31 | + if (pageNum == numberPages) { | ||
32 | + return false | ||
33 | + } | ||
34 | + // Update the page number | ||
35 | + pageNum = pageNum + 1; | ||
30 | 36 | ||
31 | - $("#loading").show(); | ||
32 | - // Configure the url we're about to hit | ||
33 | - setTimeout(function (){ | ||
34 | - $.ajax({ | ||
35 | - url: baseUrl, | ||
36 | - data: {'page': pageNum}, | ||
37 | - success: function(data) { | ||
38 | - $("#loading").hide(); | 37 | + $("#loading").show(); |
38 | + // Configure the url we're about to hit | ||
39 | + setTimeout(function (){ | ||
40 | + $.ajax({ | ||
41 | + url: baseUrl, | ||
42 | + data: {'page': pageNum}, | ||
43 | + success: function(data) { | ||
44 | + $("#loading").hide(); | ||
39 | 45 | ||
40 | - $("#timeline").append(data); | ||
41 | - }, | ||
42 | - complete: function(data, textStatus){ | ||
43 | - // Turn the scroll monitor back on | ||
44 | - $(window).bind('scroll', loadOnScroll); | ||
45 | - } | ||
46 | - }); | ||
47 | - }, 1000) | ||
48 | - }; | 46 | + $("#timeline").append(data); |
47 | + }, | ||
48 | + complete: function(data, textStatus){ | ||
49 | + // Turn the scroll monitor back on | ||
50 | + $(window).bind('scroll', loadOnScroll); | ||
51 | + } | ||
52 | + }); | ||
53 | + }, 1000) | ||
54 | + }; | ||
49 | 55 | ||
50 | - $(document).ready(function(){ | ||
51 | - $(window).bind('scroll', loadOnScroll); | ||
52 | - }); | ||
53 | - </script> | ||
54 | - {% endif %} | 56 | + $(document).ready(function(){ |
57 | + $(window).bind('scroll', loadOnScroll); | ||
58 | + }); | ||
59 | + </script> | ||
60 | + {% endif %} | ||
55 | {% endblock %} | 61 | {% endblock %} |
56 | 62 | ||
57 | {% block breadcrumbs %} | 63 | {% block breadcrumbs %} |
@@ -64,9 +70,9 @@ | @@ -64,9 +70,9 @@ | ||
64 | {% endblock %} | 70 | {% endblock %} |
65 | 71 | ||
66 | {% block sidebar %} | 72 | {% block sidebar %} |
67 | - <div class="panel panel-primary navigation"> | 73 | + <div class="panel panel-primary"> |
68 | <div class="panel-heading"> | 74 | <div class="panel-heading"> |
69 | - <h4>Menu</h4> | 75 | + <h4>{% trans 'Menu' %}</h4> |
70 | </div> | 76 | </div> |
71 | <div class="panel-body"> | 77 | <div class="panel-body"> |
72 | <ul class="nav nav-pills nav-stacked"> | 78 | <ul class="nav nav-pills nav-stacked"> |
@@ -74,10 +80,12 @@ | @@ -74,10 +80,12 @@ | ||
74 | <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li> | 80 | <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li> |
75 | {% if user|has_role:'student' or not user.is_staff %} | 81 | {% if user|has_role:'student' or not user.is_staff %} |
76 | <li><a href="{% url 'course:manage' %}">{% trans 'My courses' %}</a></li> | 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> | ||
77 | {% endif %} | 84 | {% endif %} |
78 | - <li><a href="{% url 'core:guest' %}">{% trans 'All Courses' %}</a></li> | 85 | + <li><a href="{% url 'core:guest' %}">{% trans 'Courses' %}</a></li> |
79 | {% if user|has_role:'system_admin' %} | 86 | {% if user|has_role:'system_admin' %} |
80 | <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li> | 87 | <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li> |
88 | + <li> <a href="{% url 'app:settings' %}">{% trans 'Settings' %}</a></li> | ||
81 | {% endif %} | 89 | {% endif %} |
82 | {% if user|has_role:'system_admin' or user|has_role:'professor' %} | 90 | {% if user|has_role:'system_admin' or user|has_role:'professor' %} |
83 | <li> | 91 | <li> |
@@ -97,19 +105,19 @@ | @@ -97,19 +105,19 @@ | ||
97 | {% endblock %} | 105 | {% endblock %} |
98 | 106 | ||
99 | {% block content %} | 107 | {% block content %} |
100 | - {% if user|has_role:'system_admin' %} | 108 | + {% if user|has_role:'system_admin' %} |
101 | <h3>{% trans 'Courses' %}</h3> | 109 | <h3>{% trans 'Courses' %}</h3> |
102 | <div id="timeline"> | 110 | <div id="timeline"> |
103 | - {% include page_template %} | 111 | + {% include page_template %} |
104 | </div> | 112 | </div> |
105 | - {% else %} | 113 | + {% else %} |
106 | <div id="timeline"> | 114 | <div id="timeline"> |
107 | {% include page_template %} | 115 | {% include page_template %} |
108 | </div> | 116 | </div> |
109 | - {% endif %} | ||
110 | - <div id="loading" class="alert alert-primary" role="alert" style="display: none"> | ||
111 | - <center> | ||
112 | - <span class="fa fa-spin fa-circle-o-notch"></span> | ||
113 | - </center> | ||
114 | - </div> | 117 | + {% endif %} |
118 | + <div id="loading" class="alert alert-primary" role="alert" style="display: none"> | ||
119 | + <center> | ||
120 | + <span class="fa fa-spin fa-circle-o-notch"></span> | ||
121 | + </center> | ||
122 | + </div> | ||
115 | {% endblock %} | 123 | {% endblock %} |
app/templates/home_professor.html
@@ -15,7 +15,7 @@ | @@ -15,7 +15,7 @@ | ||
15 | {% endblock %} | 15 | {% endblock %} |
16 | 16 | ||
17 | {% block sidebar %} | 17 | {% block sidebar %} |
18 | - <div class="panel panel-primary navigation"> | 18 | + <div class="panel panel-primary"> |
19 | <div class="panel-heading"> | 19 | <div class="panel-heading"> |
20 | <h5>{% trans 'Menu' %}</h5> | 20 | <h5>{% trans 'Menu' %}</h5> |
21 | </div> | 21 | </div> |
@@ -32,9 +32,9 @@ | @@ -32,9 +32,9 @@ | ||
32 | {% block content %} | 32 | {% block content %} |
33 | 33 | ||
34 | <h3>{% trans 'Courses' %}</h3> | 34 | <h3>{% trans 'Courses' %}</h3> |
35 | - {% if courses|length > 0 %} | ||
36 | - {% for course in courses %} | ||
37 | - <a href="{% url 'course:view' course.slug %}"> | 35 | + {% if courses|length > 0 %} |
36 | + {% for course in courses %} | ||
37 | + <a href="{% url 'course:view' course.slug %}"> | ||
38 | <div class="panel panel-default courseHome"> | 38 | <div class="panel panel-default courseHome"> |
39 | <div class="panel-body"> | 39 | <div class="panel-body"> |
40 | <p>{{ course }}</p> | 40 | <p>{{ course }}</p> |
@@ -48,9 +48,9 @@ | @@ -48,9 +48,9 @@ | ||
48 | </div> | 48 | </div> |
49 | </div> | 49 | </div> |
50 | </a> | 50 | </a> |
51 | - {% endfor %} | ||
52 | - {% else %} | ||
53 | - <p>{% trans "You didn't create any course yet." %}</p> | ||
54 | - {% endif %} | 51 | + {% endfor %} |
52 | + {% else %} | ||
53 | + <p>{% trans "You didn't create any course yet." %}</p> | ||
54 | + {% endif %} | ||
55 | {% endblock %} | 55 | {% endblock %} |
56 | 56 |
app/templates/home_student.html
@@ -16,23 +16,23 @@ | @@ -16,23 +16,23 @@ | ||
16 | 16 | ||
17 | 17 | ||
18 | {% block sidebar %} | 18 | {% block sidebar %} |
19 | - <div class="panel panel-primary navigation"> | 19 | + <div class="panel panel-primary"> |
20 | <div class="panel-heading"> | 20 | <div class="panel-heading"> |
21 | <h4>{% trans 'Menu' %}</h4> | 21 | <h4>{% trans 'Menu' %}</h4> |
22 | </div> | 22 | </div> |
23 | <div class="panel-body"> | 23 | <div class="panel-body"> |
24 | - <ul class="nav nav-pills nav-stacked"> | ||
25 | - <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li> | ||
26 | - <li><a href="{% url 'course:manage' %}">{% trans 'My Courses' %}</a></li> | ||
27 | - <li><a href="{% url 'core:guest' %}">{% trans 'All Courses' %}</a></li> | ||
28 | - <li><a href="javascript:void(0)">{% trans 'Google accounts' %}</a></li> | 24 | + <ul class="nav nav-pills nav-stacked"> |
25 | + <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li> | ||
26 | + <li><a href="{% url 'course:manage' %}">{% trans 'My Courses' %}</a></li> | ||
27 | + <li><a href="{% url 'course:all_courses' %}">{% trans 'All Courses' %}</a></li> | ||
28 | + <li><a href="javascript:void(0)">{% trans 'Google accounts' %}</a></li> | ||
29 | </ul> | 29 | </ul> |
30 | </div> | 30 | </div> |
31 | </div> | 31 | </div> |
32 | {% endblock %} | 32 | {% endblock %} |
33 | 33 | ||
34 | {% block content %} | 34 | {% block content %} |
35 | - <h3>{% trans 'Notifications' %}</h3> | 35 | + <h3>{% trans 'Notifications' %}</h3> |
36 | {% if messages %} | 36 | {% if messages %} |
37 | {% for message in messages %} | 37 | {% for message in messages %} |
38 | <div class="alert alert-success alert-dismissible" role="alert"> | 38 | <div class="alert alert-success alert-dismissible" role="alert"> |
@@ -44,27 +44,27 @@ | @@ -44,27 +44,27 @@ | ||
44 | {% endfor %} | 44 | {% endfor %} |
45 | {% endif %} | 45 | {% endif %} |
46 | <div class="panel panel-default"> | 46 | <div class="panel panel-default"> |
47 | - <div class="panel-body"> | ||
48 | - His course has notified a new activity! | ||
49 | - </div> | ||
50 | - <div class="panel-footer"> | ||
51 | - Go | ||
52 | - </div> | 47 | + <div class="panel-body"> |
48 | + {% trans 'His course has notified a new activity!' %} | ||
49 | + </div> | ||
50 | + <div class="panel-footer"> | ||
51 | + {% trans 'Go' %} | ||
52 | + </div> | ||
53 | </div> | 53 | </div> |
54 | <div class="panel panel-default"> | 54 | <div class="panel panel-default"> |
55 | - <div class="panel-body"> | ||
56 | - His teacher has notified a new material! | ||
57 | - </div> | ||
58 | - <div class="panel-footer"> | ||
59 | - Go | ||
60 | - </div> | 55 | + <div class="panel-body"> |
56 | + {% trans 'His teacher has notified a new material!' %} | ||
57 | + </div> | ||
58 | + <div class="panel-footer"> | ||
59 | + {% trans 'Go' %} | ||
60 | + </div> | ||
61 | </div> | 61 | </div> |
62 | <div class="panel panel-default"> | 62 | <div class="panel panel-default"> |
63 | - <div class="panel-body"> | ||
64 | - You have a new guardian! | ||
65 | - </div> | ||
66 | - <div class="panel-footer"> | ||
67 | - Go | ||
68 | - </div> | 63 | + <div class="panel-body"> |
64 | + {% trans 'You have a new guardian!' %} | ||
65 | + </div> | ||
66 | + <div class="panel-footer"> | ||
67 | + {% trans 'Go' %} | ||
68 | + </div> | ||
69 | </div> | 69 | </div> |
70 | {% endblock %} | 70 | {% endblock %} |
app/templates/home_teacher_student_content.html
@@ -11,7 +11,7 @@ | @@ -11,7 +11,7 @@ | ||
11 | </div> | 11 | </div> |
12 | <div class="col-xs-10 col-md-11"> | 12 | <div class="col-xs-10 col-md-11"> |
13 | <h4 class="resource_inline"><b>{{ notification.actor.username }}</b></h4> | 13 | <h4 class="resource_inline"><b>{{ notification.actor.username }}</b></h4> |
14 | - <p class="resource_inline">{{notification.message}} em : <a href="{% url 'core:notification_read' notification.id %}">{{ notification.action_resource.resource.name }}</a></p> | 14 | + <p class="resource_inline">{{notification.message}} {% trans 'at' %} : <a href="{% url 'core:notification_read' notification.id %}">{{ notification.action_resource.resource.name }}</a></p> |
15 | <p class="timePost"><i> {{ notification.datetime|timesince }} {% trans "ago" %} </i></p> | 15 | <p class="timePost"><i> {{ notification.datetime|timesince }} {% trans "ago" %} </i></p> |
16 | </div> | 16 | </div> |
17 | </div> | 17 | </div> |
app/urls.py
@@ -4,4 +4,5 @@ from . import views | @@ -4,4 +4,5 @@ from . import views | ||
4 | 4 | ||
5 | urlpatterns = [ | 5 | urlpatterns = [ |
6 | url(r'^$', views.AppIndex.as_view(), name='index'), | 6 | url(r'^$', views.AppIndex.as_view(), name='index'), |
7 | + url(r'^settings$', views.AmadeusSettings.as_view(), name='settings'), | ||
7 | ] | 8 | ] |
app/views.py
1 | from django.shortcuts import render | 1 | from django.shortcuts import render |
2 | from django.views.generic import ListView | 2 | from django.views.generic import ListView |
3 | +from django.views import View | ||
4 | +from rolepermissions.mixins import HasRoleMixin | ||
3 | from django.contrib.auth.mixins import LoginRequiredMixin | 5 | from django.contrib.auth.mixins import LoginRequiredMixin |
4 | from django.core.urlresolvers import reverse_lazy | 6 | from django.core.urlresolvers import reverse_lazy |
5 | from core.mixins import LogMixin, NotificationMixin | 7 | from core.mixins import LogMixin, NotificationMixin |
6 | from core.models import Notification, Action, Resource, Action_Resource | 8 | from core.models import Notification, Action, Resource, Action_Resource |
7 | from users.models import User | 9 | from users.models import User |
10 | +from .models import EmailBackend | ||
11 | +from .forms import EmailBackendForm | ||
8 | from courses.models import Course | 12 | from courses.models import Course |
9 | 13 | ||
10 | class AppIndex(LoginRequiredMixin, LogMixin, ListView, NotificationMixin): | 14 | class AppIndex(LoginRequiredMixin, LogMixin, ListView, NotificationMixin): |
@@ -42,4 +46,17 @@ class AppIndex(LoginRequiredMixin, LogMixin, ListView, NotificationMixin): | @@ -42,4 +46,17 @@ class AppIndex(LoginRequiredMixin, LogMixin, ListView, NotificationMixin): | ||
42 | 46 | ||
43 | return self.response_class(request = self.request, template = self.template_name, context = context, using = self.template_engine, **response_kwargs) | 47 | return self.response_class(request = self.request, template = self.template_name, context = context, using = self.template_engine, **response_kwargs) |
44 | 48 | ||
49 | +class AmadeusSettings(LoginRequiredMixin, HasRoleMixin, View): | ||
50 | + allowed_roles = ['system_admin'] | ||
51 | + login_url = reverse_lazy("core:home") | ||
52 | + redirect_field_name = 'next' | ||
53 | + model = EmailBackend | ||
54 | + template_name = 'admin_settings.html' | ||
55 | + form_class = EmailBackendForm | ||
56 | + success_url = reverse_lazy('app:settings') | ||
57 | + | ||
58 | + def get(self, request): | ||
59 | + return render(request, self.template_name, ) | ||
60 | + | ||
61 | + | ||
45 | 62 |
core/locale/he_il/LC_MESSAGES/django.po
@@ -1,66 +0,0 @@ | @@ -1,66 +0,0 @@ | ||
1 | -# SOME DESCRIPTIVE TITLE. | ||
2 | -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||
3 | -# This file is distributed under the same license as the PACKAGE package. | ||
4 | -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||
5 | -# | ||
6 | -#, fuzzy | ||
7 | -msgid "" | ||
8 | -msgstr "" | ||
9 | -"Project-Id-Version: PACKAGE VERSION\n" | ||
10 | -"Report-Msgid-Bugs-To: \n" | ||
11 | -"POT-Creation-Date: 2016-09-16 02:41-0300\n" | ||
12 | -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||
13 | -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||
14 | -"Language-Team: LANGUAGE <LL@li.org>\n" | ||
15 | -"Language: \n" | ||
16 | -"MIME-Version: 1.0\n" | ||
17 | -"Content-Type: text/plain; charset=UTF-8\n" | ||
18 | -"Content-Transfer-Encoding: 8bit\n" | ||
19 | - | ||
20 | -#: core/templates/base.html:97 | ||
21 | -msgid "Log out" | ||
22 | -msgstr "" | ||
23 | - | ||
24 | -#: core/templates/index.html:38 | ||
25 | -msgid "Username" | ||
26 | -msgstr "" | ||
27 | - | ||
28 | -#: core/templates/index.html:44 | ||
29 | -msgid "Password" | ||
30 | -msgstr "" | ||
31 | - | ||
32 | -#: core/templates/index.html:52 | ||
33 | -msgid "Remember Email" | ||
34 | -msgstr "" | ||
35 | - | ||
36 | -#: core/templates/index.html:61 | ||
37 | -msgid "Guest" | ||
38 | -msgstr "" | ||
39 | - | ||
40 | -#: core/templates/index.html:64 core/templates/register_user.html:71 | ||
41 | -msgid "Login" | ||
42 | -msgstr "" | ||
43 | - | ||
44 | -#: core/templates/index.html:73 | ||
45 | -msgid "Sign Up" | ||
46 | -msgstr "" | ||
47 | - | ||
48 | -#: core/templates/register_user.html:29 | ||
49 | -msgid "User Register" | ||
50 | -msgstr "" | ||
51 | - | ||
52 | -#: core/templates/register_user.html:68 | ||
53 | -msgid "Save" | ||
54 | -msgstr "" | ||
55 | - | ||
56 | -#: core/templates/remember_password.html:27 | ||
57 | -msgid "E-mail" | ||
58 | -msgstr "" | ||
59 | - | ||
60 | -#: core/templates/remember_password.html:31 | ||
61 | -msgid "Registration" | ||
62 | -msgstr "" | ||
63 | - | ||
64 | -#: core/templates/remember_password.html:35 | ||
65 | -msgid "Send" | ||
66 | -msgstr "" |
core/locale/pt_BR/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid "" | @@ -8,7 +8,7 @@ msgid "" | ||
8 | msgstr "" | 8 | msgstr "" |
9 | "Project-Id-Version: PACKAGE VERSION\n" | 9 | "Project-Id-Version: PACKAGE VERSION\n" |
10 | "Report-Msgid-Bugs-To: \n" | 10 | "Report-Msgid-Bugs-To: \n" |
11 | -"POT-Creation-Date: 2016-09-07 00:13-0300\n" | 11 | +"POT-Creation-Date: 2016-10-26 14:47-0300\n" |
12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | 13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
14 | "Language-Team: LANGUAGE <LL@li.org>\n" | 14 | "Language-Team: LANGUAGE <LL@li.org>\n" |
@@ -17,91 +17,391 @@ msgstr "" | @@ -17,91 +17,391 @@ msgstr "" | ||
17 | "Content-Type: text/plain; charset=UTF-8\n" | 17 | "Content-Type: text/plain; charset=UTF-8\n" |
18 | "Content-Transfer-Encoding: 8bit\n" | 18 | "Content-Transfer-Encoding: 8bit\n" |
19 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" | 19 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" |
20 | +#: core/forms.py:12 | ||
21 | +msgid "Password" | ||
22 | +msgstr "Senha" | ||
23 | + | ||
24 | +#: core/forms.py:13 | ||
25 | +msgid "Password confirmation" | ||
26 | +msgstr "Confirmação de senha" | ||
27 | + | ||
28 | +#: core/forms.py:27 | ||
29 | +msgid "There is already a registered User with this e-mail" | ||
30 | +msgstr "Já existe um usuário cadastrado com esse e-mail" | ||
31 | + | ||
32 | +#: core/forms.py:33 | ||
33 | +msgid "Please enter a valid date" | ||
34 | +msgstr "Por favor, insira uma data válida" | ||
35 | + | ||
36 | +#: core/forms.py:40 | ||
37 | +msgid "There is already a registeres User with this CPF" | ||
38 | +msgstr "Já existem usuários cadastrados com este CPF" | ||
39 | + | ||
40 | +#: core/forms.py:42 | ||
41 | +msgid "Please enter a valid CPF" | ||
42 | +msgstr "Por favor, insira um CPF válido" | ||
43 | + | ||
44 | +#: core/forms.py:50 | ||
45 | +#, python-format | ||
46 | +msgid "The password must contain at least % d characters." | ||
47 | +msgstr "A senha deve conter pelo menos % d caracteres" | ||
48 | + | ||
49 | +#: core/forms.py:55 | ||
50 | +msgid "" | ||
51 | +"The password must contain at least one letter and at least one digit or a " | ||
52 | +"punctuation character." | ||
53 | +msgstr "A senha deve conter pelo menos uma letra, um dígito ou caracter de pontuação." | ||
54 | + | ||
55 | +#: core/forms.py:65 | ||
56 | +msgid "The confirmation password is incorrect." | ||
57 | +msgstr "A confirmação de senha está incorreta." | ||
58 | + | ||
59 | +#: core/models.py:8 | ||
60 | +msgid "Type" | ||
61 | +msgstr "Tipo" | ||
20 | 62 | ||
21 | -#: core/models.py:15 core/models.py:36 | 63 | +#: core/models.py:9 |
64 | +msgid "Icon" | ||
65 | +msgstr "" | ||
66 | + | ||
67 | +#: core/models.py:12 | ||
68 | +msgid "Amadeus Mime Type" | ||
69 | +msgstr "" | ||
70 | + | ||
71 | +#: core/models.py:13 | ||
72 | +msgid "Amadeus Mime Types" | ||
73 | +msgstr "" | ||
74 | + | ||
75 | +#: core/models.py:27 core/models.py:51 | ||
22 | msgid "Name" | 76 | msgid "Name" |
23 | msgstr "Nome" | 77 | msgstr "Nome" |
24 | 78 | ||
25 | -#: core/models.py:16 core/models.py:37 | ||
26 | -msgid "Created Date" | 79 | +#: core/models.py:28 core/models.py:52 |
80 | +msgid "Slug" | ||
27 | msgstr "" | 81 | msgstr "" |
28 | 82 | ||
29 | -#: core/models.py:49 | 83 | +#: core/models.py:29 core/models.py:53 |
84 | +msgid "Created Date" | ||
85 | +msgstr "Data de criação" | ||
86 | + | ||
87 | +#: core/models.py:54 | ||
88 | +msgid "URL" | ||
89 | +msgstr "URL" | ||
90 | + | ||
91 | +#: core/models.py:67 | ||
30 | msgid "Action_Applied" | 92 | msgid "Action_Applied" |
31 | msgstr "" | 93 | msgstr "" |
32 | 94 | ||
33 | -#: core/models.py:50 | 95 | +#: core/models.py:68 |
34 | msgid "Resource" | 96 | msgid "Resource" |
35 | msgstr "" | 97 | msgstr "" |
36 | 98 | ||
37 | -#: core/models.py:61 | ||
38 | -msgid "message" | ||
39 | -msgstr "mensagem" | 99 | +#: core/models.py:89 |
100 | +msgid "Message" | ||
101 | +msgstr "Mensagem" | ||
40 | 102 | ||
41 | -#: core/models.py:62 | ||
42 | -msgid "Actor" | 103 | +#: core/models.py:90 |
104 | +#, python-format | ||
105 | +msgid "%(class)s_Actor" | ||
43 | msgstr "" | 106 | msgstr "" |
44 | 107 | ||
45 | -#: core/models.py:63 | 108 | +#: core/models.py:90 |
109 | +msgid "User" | ||
110 | +msgstr "Usuário" | ||
111 | + | ||
112 | +#: core/models.py:91 | ||
46 | msgid "Read" | 113 | msgid "Read" |
47 | msgstr "" | 114 | msgstr "" |
48 | 115 | ||
49 | -#: core/models.py:64 | 116 | +#: core/models.py:92 core/models.py:104 |
117 | +msgid "Date and Time of action" | ||
118 | +msgstr "Data e hora da ação" | ||
119 | + | ||
120 | +#: core/models.py:93 core/models.py:106 | ||
50 | msgid "Action_Resource" | 121 | msgid "Action_Resource" |
51 | msgstr "" | 122 | msgstr "" |
52 | 123 | ||
53 | -#: core/templates/base.html:56 | ||
54 | -msgid "Log out" | ||
55 | -msgstr "Sair" | 124 | +#: core/models.py:94 |
125 | +#, python-format | ||
126 | +msgid "%(class)s_Performer" | ||
127 | +msgstr "" | ||
128 | + | ||
129 | +#: core/models.py:94 | ||
130 | +msgid "Perfomer" | ||
131 | +msgstr "Ator" | ||
132 | + | ||
133 | +#: core/models.py:97 | ||
134 | +msgid "Notification" | ||
135 | +msgstr "Notificação" | ||
136 | + | ||
137 | +#: core/models.py:98 core/templates/base.html:73 core/templates/guest.html:68 | ||
138 | +msgid "Notifications" | ||
139 | +msgstr "Notificações" | ||
140 | + | ||
141 | +#: core/models.py:105 | ||
142 | +msgid "Actor" | ||
143 | +msgstr "Ator" | ||
144 | + | ||
145 | +#: core/models.py:109 | ||
146 | +msgid "Log" | ||
147 | +msgstr "Log" | ||
148 | + | ||
149 | +#: core/models.py:110 | ||
150 | +msgid "Logs" | ||
151 | +msgstr "Logs" | ||
152 | + | ||
153 | +#: core/templates/base.html:80 core/templates/guest.html:75 | ||
154 | +msgid "See More" | ||
155 | +msgstr "Ver Mais" | ||
156 | + | ||
157 | +#: core/templates/base.html:87 core/templates/guest.html:81 | ||
158 | +msgid "messages" | ||
159 | +msgstr "Mensagens" | ||
160 | + | ||
161 | +#: core/templates/base.html:100 core/templates/guest.html:94 | ||
162 | +msgid "Menu" | ||
163 | +msgstr "Menu" | ||
164 | + | ||
165 | +#: core/templates/base.html:104 core/templates/lembrar_senha.html:110 | ||
166 | +msgid "Home" | ||
167 | +msgstr "Início" | ||
168 | + | ||
169 | +#: core/templates/base.html:105 | ||
170 | +msgid "Profile" | ||
171 | +msgstr "Perfil" | ||
172 | + | ||
173 | +#: core/templates/base.html:107 | ||
174 | +msgid "My courses" | ||
175 | +msgstr "Meus cursos" | ||
176 | + | ||
177 | +#: core/templates/base.html:108 | ||
178 | +msgid "All Courses" | ||
179 | +msgstr "Cursos" | ||
180 | + | ||
181 | +#: core/templates/base.html:111 | ||
182 | +msgid "Manage Users" | ||
183 | +msgstr "Gerenciar usuários" | ||
184 | + | ||
185 | +#: core/templates/base.html:115 | ||
186 | +msgid "Manage Courses" | ||
187 | +msgstr "Gerenciar cursos" | ||
188 | + | ||
189 | +#: core/templates/base.html:133 | ||
190 | +msgid "Category" | ||
191 | +msgstr "Categoria" | ||
192 | + | ||
193 | +#: core/templates/base.html:137 | ||
194 | +msgid "Create Category" | ||
195 | +msgstr "Criar categorias" | ||
196 | + | ||
197 | +#: core/templates/base.html:138 | ||
198 | +msgid "List Category" | ||
199 | +msgstr "Listar categoria" | ||
200 | + | ||
201 | +#: core/templates/guest.html:98 | ||
202 | +msgid "Register" | ||
203 | +msgstr "Cadastrar" | ||
56 | 204 | ||
57 | -#: core/templates/index.html:30 | 205 | +#: core/templates/guest.html:123 |
206 | +msgid "All" | ||
207 | +msgstr "Todos" | ||
208 | + | ||
209 | +#: core/templates/guest.html:141 | ||
210 | +msgid "Are you sure you want to subscribe to this course?" | ||
211 | +msgstr "Tem certeza que deseja se inscrever neste curso?" | ||
212 | + | ||
213 | +#: core/templates/guest.html:141 | ||
214 | +msgid "Subscribe" | ||
215 | +msgstr "Inscrever" | ||
216 | + | ||
217 | +#: core/templates/guest.html:146 | ||
218 | +msgid "Course Name" | ||
219 | +msgstr "Nome do curso" | ||
220 | + | ||
221 | +#: core/templates/guest.html:147 | ||
222 | +msgid "Begining" | ||
223 | +msgstr "Início" | ||
224 | + | ||
225 | +#: core/templates/guest.html:148 | ||
226 | +msgid "End" | ||
227 | +msgstr "Fim" | ||
228 | + | ||
229 | +#: core/templates/guest.html:149 | ||
230 | +msgid "Professor" | ||
231 | +msgstr "Professor" | ||
232 | + | ||
233 | +#: core/templates/guest.html:151 | ||
234 | +msgid "Description" | ||
235 | +msgstr "Descrição" | ||
236 | + | ||
237 | +#: core/templates/index.html:39 | ||
58 | msgid "Username" | 238 | msgid "Username" |
59 | -msgstr "Usuário" | 239 | +msgstr "Login" |
60 | 240 | ||
61 | -#: core/templates/index.html:36 | ||
62 | -msgid "Password" | 241 | +#: core/templates/index.html:45 |
242 | +msgid "password" | ||
63 | msgstr "Senha" | 243 | msgstr "Senha" |
64 | 244 | ||
65 | -#: core/templates/index.html:44 | 245 | +#: core/templates/index.html:52 |
66 | msgid "Remember Email" | 246 | msgid "Remember Email" |
67 | -msgstr "Lembrar Senha" | 247 | +msgstr "Lembrar E-mail" |
248 | + | ||
249 | +#: core/templates/index.html:58 | ||
250 | +msgid "Login" | ||
251 | +msgstr "" | ||
68 | 252 | ||
69 | -#: core/templates/index.html:53 | 253 | +#: core/templates/index.html:61 |
70 | msgid "Guest" | 254 | msgid "Guest" |
71 | msgstr "Convidado" | 255 | msgstr "Convidado" |
72 | 256 | ||
73 | -#: core/templates/index.html:56 | ||
74 | -msgid "Login" | ||
75 | -msgstr "Entrar" | 257 | +#: core/templates/index.html:64 |
258 | +msgid "Forgot your password?" | ||
259 | +msgstr "Esqueceu a senha?" | ||
76 | 260 | ||
77 | -#: core/templates/index.html:65 | 261 | +#: core/templates/index.html:68 |
78 | msgid "Sign Up" | 262 | msgid "Sign Up" |
79 | msgstr "Cadastrar" | 263 | msgstr "Cadastrar" |
80 | 264 | ||
81 | -#: core/templates/register_user.html:29 | 265 | +#: core/templates/lembrar_senha.html:40 |
266 | +msgid "Amadeus Project" | ||
267 | +msgstr "Projeto Amadeus" | ||
268 | + | ||
269 | +#: core/templates/lembrar_senha.html:65 | ||
270 | +msgid "Enter" | ||
271 | +msgstr "Entrar" | ||
272 | + | ||
273 | +#: core/templates/lembrar_senha.html:101 | ||
274 | +msgid "The Project" | ||
275 | +msgstr "O Projeto" | ||
276 | + | ||
277 | +#: core/templates/lembrar_senha.html:103 | ||
278 | +msgid "CCTE Group" | ||
279 | +msgstr "Grupo CCTE" | ||
280 | + | ||
281 | +#: core/templates/lembrar_senha.html:106 core/templates/lembrar_senha.html:111 | ||
282 | +msgid "Remember password" | ||
283 | +msgstr "Lembrar senha" | ||
284 | + | ||
285 | +#: core/templates/lembrar_senha.html:117 | ||
286 | +msgid "New account" | ||
287 | +msgstr "Nova conta" | ||
288 | + | ||
289 | +#: core/templates/lembrar_senha.html:126 | ||
290 | +msgid "Email" | ||
291 | +msgstr "E-mail" | ||
292 | + | ||
293 | +#: core/templates/lembrar_senha.html:128 | ||
294 | +msgid "Your Email address (exemple@mail.com)" | ||
295 | +msgstr "Seu endereço de e-mail (exemplo@mail.com)" | ||
296 | + | ||
297 | +#: core/templates/lembrar_senha.html:163 | ||
298 | +msgid "Copyright Amadeus. All rights reserved" | ||
299 | +msgstr "Copyright Amadeus. Todos os direitos reservados" | ||
300 | + | ||
301 | +#: core/templates/register_user.html:36 | ||
82 | msgid "User Register" | 302 | msgid "User Register" |
83 | -msgstr "Registrar Usuário" | 303 | +msgstr "Cadastro de usuário" |
84 | 304 | ||
85 | -#: core/templates/register_user.html:53 | 305 | +#: core/templates/register_user.html:88 |
86 | msgid "Save" | 306 | msgid "Save" |
87 | msgstr "Salvar" | 307 | msgstr "Salvar" |
88 | 308 | ||
89 | -#: core/templates/remember_password.html:18 | 309 | +#: core/templates/register_user.html:91 |
310 | +msgid "Cancel" | ||
311 | +msgstr "Cancelar" | ||
312 | + | ||
313 | +#: core/templates/registration/passwor_reset_complete.html:25 | ||
314 | +msgid "Your password has been set. You can go ahead and go now." | ||
315 | +msgstr "Sua senha foi redefinida. Você pode prosseguir." | ||
316 | + | ||
317 | +#: core/templates/registration/passwor_reset_confirm.html:24 | ||
318 | +msgid "" | ||
319 | +"Please enter your new password twice so we can verify you typed it in " | ||
320 | +"correctly." | ||
321 | +msgstr "Por favor, insira uma nova senha duas vezes para verificarmos que digitou corretamente." | ||
322 | + | ||
323 | +#: core/templates/registration/passwor_reset_confirm.html:28 | ||
324 | +msgid "New password:" | ||
325 | +msgstr "Nova senha:" | ||
326 | + | ||
327 | +#: core/templates/registration/passwor_reset_confirm.html:30 | ||
328 | +msgid "Confirm password:" | ||
329 | +msgstr "Confirmação de senha:" | ||
330 | + | ||
331 | +#: core/templates/registration/passwor_reset_confirm.html:31 | ||
332 | +msgid "Change my password" | ||
333 | +msgstr "Mudar senha" | ||
334 | + | ||
335 | +#: core/templates/registration/passwor_reset_confirm.html:36 | ||
336 | +msgid "" | ||
337 | +"The password reset link was invalid, possibly because it has already been " | ||
338 | +"used. Please request a new password reset." | ||
339 | +msgstr "O link de redefinição de senha está inválido, possivelmente porque ele já foi utilizado. Por favor, solicite uma nova redefinição de senha." | ||
340 | + | ||
341 | +#: core/templates/registration/passwor_reset_done.html:39 | ||
342 | +msgid "" | ||
343 | +"We have sent instructions to set up your password, if an account exists with " | ||
344 | +"the email entered. You should receive them soon." | ||
345 | +msgstr "Foi enviado as instruções para redefinição de senha, se a conta existe com o e-mail informado. Você deve receber a mensagem em breve." | ||
346 | + | ||
347 | +#: core/templates/registration/passwor_reset_done.html:40 | ||
348 | +msgid "" | ||
349 | +"If you do not receive an email, please make sure you entered the address you " | ||
350 | +"registered, and check the spam folder." | ||
351 | +msgstr "Se você não recebeu a mensagem, certifique que informou o e-mail corretamente e cheque sua caixa de spam" | ||
352 | + | ||
353 | +#: core/templates/registration/passwor_reset_done.html:43 | ||
354 | +#: core/templates/registration/passwor_reset_form.html:46 | ||
355 | +msgid "Back" | ||
356 | +msgstr "Voltar" | ||
357 | + | ||
358 | +#: core/templates/registration/passwor_reset_form.html:39 | ||
90 | msgid "E-mail" | 359 | msgid "E-mail" |
91 | msgstr "E-mail" | 360 | msgstr "E-mail" |
92 | 361 | ||
93 | -#: core/templates/remember_password.html:22 | ||
94 | -msgid "Registration" | ||
95 | -msgstr "Registrar" | ||
96 | - | ||
97 | -#: core/templates/remember_password.html:26 | 362 | +#: core/templates/registration/passwor_reset_form.html:43 |
98 | msgid "Send" | 363 | msgid "Send" |
99 | msgstr "Enviar" | 364 | msgstr "Enviar" |
100 | 365 | ||
101 | -#: core/views.py:31 | 366 | +#: core/templates/registration/password_reset_subject.txt:2 |
367 | +#, python-format | ||
368 | +msgid "Password reset on %(site_name)s" | ||
369 | +msgstr "Senha redefinida em %(site_name)s" | ||
370 | + | ||
371 | +#: core/tests.py:97 | ||
372 | +msgid "Enter a valid email address." | ||
373 | +msgstr "Insira um e-mail válido." | ||
374 | + | ||
375 | +#: core/tests.py:111 core/tests.py:204 | ||
376 | +msgid "This field is required." | ||
377 | +msgstr "Este campo é obrigatório." | ||
378 | + | ||
379 | +#: core/views.py:41 | ||
102 | msgid "User successfully registered!" | 380 | msgid "User successfully registered!" |
103 | -msgstr "Usuario cadastrado com sucesso" | 381 | +msgstr "Usuário cadastrado com sucesso!" |
382 | + | ||
383 | +#: core/views.py:56 | ||
384 | +msgid "Recover your password" | ||
385 | +msgstr "Redefina sua senha" | ||
386 | + | ||
387 | +#: core/views.py:57 | ||
388 | +#, python-brace-format | ||
389 | +msgid "" | ||
390 | +"Hello {0}, \n" | ||
391 | +"Recover your password to use your account.\n" | ||
392 | +"Number of registration: {1}\n" | ||
393 | +"Link for recuver password.\n" | ||
394 | +"\n" | ||
395 | +"Respectfully,\n" | ||
396 | +"Team Amadeus." | ||
397 | +msgstr "Olá, {0} \n" | ||
398 | +"Redefina a senha para utilizar sua conta.\n" | ||
399 | +"Número de registro: {1}\n" | ||
400 | +"Link para redefinição de senha.\n" | ||
401 | +"\n" | ||
402 | +"Atenciosamente,\n" | ||
403 | +"Equipe Amadeus." | ||
104 | 404 | ||
105 | -#: core/views.py:54 | ||
106 | -msgid "E-mail or password are incorrect!" | ||
107 | -msgstr "O E-mail e/ou a senha estão incorretos" | 405 | +#: core/views.py:83 |
406 | +msgid "E-mail or password are incorrect." | ||
407 | +msgstr "E-mail ou senha incorretos." |
core/static/css/base/amadeus.css
@@ -2,6 +2,10 @@ | @@ -2,6 +2,10 @@ | ||
2 | clear: both; | 2 | clear: both; |
3 | } | 3 | } |
4 | 4 | ||
5 | +.mg-b-5m{ | ||
6 | + margin-bottom: 5em; | ||
7 | +} | ||
8 | + | ||
5 | .navbar .logo {position: absolute; top: 6px; text-align: center; height: 48px; width: 48px;} | 9 | .navbar .logo {position: absolute; top: 6px; text-align: center; height: 48px; width: 48px;} |
6 | 10 | ||
7 | /* Modal */ | 11 | /* Modal */ |
@@ -30,7 +34,7 @@ | @@ -30,7 +34,7 @@ | ||
30 | margin: 10% 10% 5% 5%; | 34 | margin: 10% 10% 5% 5%; |
31 | } | 35 | } |
32 | .breadcrumb{ | 36 | .breadcrumb{ |
33 | - margin-bottom: 5px; | 37 | + margin-bottom: 25px; |
34 | } | 38 | } |
35 | .courseHome{ | 39 | .courseHome{ |
36 | text-align: center; | 40 | text-align: center; |
@@ -394,4 +398,27 @@ ul, li { | @@ -394,4 +398,27 @@ ul, li { | ||
394 | -webkit-animation-duration: 900ms; | 398 | -webkit-animation-duration: 900ms; |
395 | -webkit-animation-iteration-count: 3; | 399 | -webkit-animation-iteration-count: 3; |
396 | -webkit-animation-timing-function: ease-in-out; | 400 | -webkit-animation-timing-function: ease-in-out; |
401 | +} | ||
402 | +/* Icon Topic */ | ||
403 | +.divMoreActions {text-align: right; height: 39px; float: right;} | ||
404 | +.divMoreActions div button {padding-left: 10px; padding-right: 10px; padding-bottom: 10px; margin-bottom: 4px; height: 31px;} | ||
405 | +.titleTopic {padding-top: 18px; padding-left: 0px;} | ||
406 | +.titleTopic-detail {padding-top: 8px; color: white;} | ||
407 | +.titleTopic a h4 {margin-top: 0px; color: black; cursor:pointer;} | ||
408 | +.dropdown-menu .pull-right { | ||
409 | + right: 0; | ||
410 | + } | ||
411 | + .editation{display: none} | ||
412 | +.moreAccordion{ padding-left: 0px; padding-right: 0px;} | ||
413 | +.moreAccordion div button{ padding-left: 0px; padding-right: 0px;} | ||
414 | +.cards-content{ padding-left: 0px; padding-right: 0px; } | ||
415 | +.cards-detail{margin-left: 4%;} | ||
416 | +.cards-detail .panel .panel-heading{/*background-color:;*/} | ||
417 | +.cards-detail .panel .panel-heading h4{color:black;} | ||
418 | +.course, .subject, .topic{ padding-top: 0px; padding-bottom: 0px; } | ||
419 | +.course-detail{padding-top: 10px; padding-bottom: 10px;} | ||
420 | + | ||
421 | +/* Menu link remove radius */ | ||
422 | +.nav-pills > li > a { | ||
423 | + border-radius: 0px; | ||
397 | } | 424 | } |
398 | \ No newline at end of file | 425 | \ No newline at end of file |
core/static/js/base/amadeus.js
@@ -14,6 +14,7 @@ function campoNumerico(campo, evento){ | @@ -14,6 +14,7 @@ function campoNumerico(campo, evento){ | ||
14 | return true; | 14 | return true; |
15 | } else { | 15 | } else { |
16 | evento.returnValue = false; | 16 | evento.returnValue = false; |
17 | + evento.preventDefault(); | ||
17 | return false; | 18 | return false; |
18 | } | 19 | } |
19 | }; | 20 | }; |
@@ -28,7 +29,7 @@ function formatarCpf(campo, evento){ | @@ -28,7 +29,7 @@ function formatarCpf(campo, evento){ | ||
28 | } | 29 | } |
29 | else if( evento ) { // Firefox | 30 | else if( evento ) { // Firefox |
30 | codTecla = evento.which; | 31 | codTecla = evento.which; |
31 | - } | 32 | + } |
32 | tamanho = campo.value.length; | 33 | tamanho = campo.value.length; |
33 | if( (codTecla > 47 && codTecla < 58) || codTecla== 8 || codTecla == 0){ | 34 | if( (codTecla > 47 && codTecla < 58) || codTecla== 8 || codTecla == 0){ |
34 | if(tamanho < 14 ){ | 35 | if(tamanho < 14 ){ |
@@ -41,8 +42,8 @@ function formatarCpf(campo, evento){ | @@ -41,8 +42,8 @@ function formatarCpf(campo, evento){ | ||
41 | } | 42 | } |
42 | }else{ | 43 | }else{ |
43 | evento.returnValue = false; | 44 | evento.returnValue = false; |
45 | + return false; | ||
44 | } | 46 | } |
45 | - return true; | ||
46 | } else { | 47 | } else { |
47 | return false; | 48 | return false; |
48 | } | 49 | } |
@@ -61,30 +62,28 @@ function formatarTelefone(campo, evento){ | @@ -61,30 +62,28 @@ function formatarTelefone(campo, evento){ | ||
61 | } | 62 | } |
62 | tamanho = campo.value.length; | 63 | tamanho = campo.value.length; |
63 | 64 | ||
64 | - if(((codTecla > 47 && codTecla < 58) || (codTecla == 8)) && tamanho < 15){ | 65 | + if(((codTecla > 47 && codTecla < 58) && tamanho < 15)){ |
65 | 66 | ||
66 | if(tamanho == 0){ | 67 | if(tamanho == 0){ |
67 | campo.value = "(" + campo.value; | 68 | campo.value = "(" + campo.value; |
68 | }else if( tamanho == 3 ){ | 69 | }else if( tamanho == 3 ){ |
69 | campo.value = campo.value + ") "; | 70 | campo.value = campo.value + ") "; |
70 | - }else if(tamanho == 9){ | 71 | + }else if(tamanho == 10){ |
71 | campo.value = campo.value + "-"; | 72 | campo.value = campo.value + "-"; |
72 | - }else if(tamanho == 14){ | ||
73 | - // alert('oi'); | ||
74 | - campo.value = campo.value.slice(0, 4) + campo.value.slice(5, 14); | ||
75 | - campo.value = campo.value.slice(0, 8) + campo.value.slice(9, 10) + campo.value.slice(8, 9) + campo.value.slice(10, 14) | ||
76 | } | 73 | } |
77 | return true; | 74 | return true; |
78 | 75 | ||
76 | + | ||
79 | } else if(codTecla == 0 || codTecla == 8){ | 77 | } else if(codTecla == 0 || codTecla == 8){ |
80 | return true; | 78 | return true; |
81 | } else { | 79 | } else { |
82 | evento.returnValue = false; | 80 | evento.returnValue = false; |
81 | + evento.preventDefault() | ||
83 | return false; | 82 | return false; |
84 | } | 83 | } |
84 | + evento.preventDefault() | ||
85 | return false; | 85 | return false; |
86 | -} | ||
87 | - | 86 | +}; |
88 | /* | 87 | /* |
89 | This functions get the next 5 notifications from the user given a "step"(an amount) of previous notifications | 88 | This functions get the next 5 notifications from the user given a "step"(an amount) of previous notifications |
90 | */ | 89 | */ |
core/templates/base.html
1 | <!DOCTYPE html> | 1 | <!DOCTYPE html> |
2 | 2 | ||
3 | {% load static i18n %} | 3 | {% load static i18n %} |
4 | +{% load static i18n permission_tags %} | ||
4 | {% get_current_language as LANGUAGE_CODE %} | 5 | {% get_current_language as LANGUAGE_CODE %} |
5 | 6 | ||
6 | <html> | 7 | <html> |
@@ -19,21 +20,27 @@ | @@ -19,21 +20,27 @@ | ||
19 | 20 | ||
20 | <!-- Bootstrap and themes (material) --> | 21 | <!-- Bootstrap and themes (material) --> |
21 | <link rel="stylesheet" type="text/css" href="{% static 'bootstrap-3.3.7/css/bootstrap.css' %}"> | 22 | <link rel="stylesheet" type="text/css" href="{% static 'bootstrap-3.3.7/css/bootstrap.css' %}"> |
22 | - <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/material.min.css' %}"> | ||
23 | - <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/ripples.min.css' %}"> | 23 | + <link rel="stylesheet" type="text/css" href="{% static 'material/css/bootstrap-material-design.css' %}"> |
24 | + <link rel="stylesheet" type="text/css" href="{% static 'material/css/bootstrap-material-design.min.css' %}"> | ||
25 | + <link rel="stylesheet" type="text/css" href="{% static 'material/css/ripples.css' %}"> | ||
26 | + <link rel="stylesheet" type="text/css" href="{% static 'material/css/ripples.min.css' %}"> | ||
27 | + | ||
28 | + | ||
24 | <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/bootstrap-datepicker.standalone.css' %}"> | 29 | <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/bootstrap-datepicker.standalone.css' %}"> |
25 | <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/alertifyjs/alertify.min.css' %}"> | 30 | <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/alertifyjs/alertify.min.css' %}"> |
26 | <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/alertifyjs/themes/bootstrap.css' %}"> | 31 | <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/alertifyjs/themes/bootstrap.css' %}"> |
27 | <script type="text/javascript" src="{% static 'bootstrap-3.3.7/js/bootstrap.js' %}"></script> | 32 | <script type="text/javascript" src="{% static 'bootstrap-3.3.7/js/bootstrap.js' %}"></script> |
28 | <script type="text/javascript" src="{% static 'js/vendor/bootstrap-acessibility.min.js' %}"></script> | 33 | <script type="text/javascript" src="{% static 'js/vendor/bootstrap-acessibility.min.js' %}"></script> |
29 | - <script type="text/javascript" src="{% static 'js/vendor/material.min.js' %}"></script> | ||
30 | - <script type="text/javascript" src="{% static 'js/vendor/ripples.min.js' %}"></script> | 34 | + <script type="text/javascript" src="{% static 'material/js/material.js' %}"></script> |
35 | + <script type="text/javascript" src="{% static 'material/js/material.min.js' %}"></script> | ||
36 | + <script type="text/javascript" src="{% static 'material/js/ripples.js' %}"></script> | ||
37 | + <script type="text/javascript" src="{% static 'material/js/ripples.min.js' %}"></script> | ||
31 | <script type="text/javascript" src="{% static 'js/vendor/bootstrap-datepicker.js' %}"></script> | 38 | <script type="text/javascript" src="{% static 'js/vendor/bootstrap-datepicker.js' %}"></script> |
32 | 39 | ||
33 | {% with "js/vendor/locales/bootstrap-datepicker."|add:LANGUAGE_CODE|add:".js" as locale_datepicker %} | 40 | {% with "js/vendor/locales/bootstrap-datepicker."|add:LANGUAGE_CODE|add:".js" as locale_datepicker %} |
34 | <script type="text/javascript" src="{% static locale_datepicker %}"></script> | 41 | <script type="text/javascript" src="{% static locale_datepicker %}"></script> |
35 | {% endwith %} | 42 | {% endwith %} |
36 | - | 43 | + |
37 | <script type="text/javascript" src="{% static 'js/vendor/alertify.min.js' %}"></script> | 44 | <script type="text/javascript" src="{% static 'js/vendor/alertify.min.js' %}"></script> |
38 | <script type="text/javascript" src="{% static 'js/vendor/jscookie.js' %}"></script> | 45 | <script type="text/javascript" src="{% static 'js/vendor/jscookie.js' %}"></script> |
39 | 46 | ||
@@ -69,14 +76,14 @@ | @@ -69,14 +76,14 @@ | ||
69 | <li class="" data-toggle="tooltip" data-placement="bottom" title data-original-title="notifications"> | 76 | <li class="" data-toggle="tooltip" data-placement="bottom" title data-original-title="notifications"> |
70 | <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> | 77 | <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> |
71 | <ul id="notification-dropdown" class="dropdown-menu"> | 78 | <ul id="notification-dropdown" class="dropdown-menu"> |
72 | - <li class="dropdown-header">Notifications</li> | 79 | + <li class="dropdown-header"> {% trans 'Notifications' %}</li> |
73 | {% include "notifications.html" %} | 80 | {% include "notifications.html" %} |
74 | 81 | ||
75 | <li> | 82 | <li> |
76 | <a onclick="getNotifications(5)"> | 83 | <a onclick="getNotifications(5)"> |
77 | <div id="notification-see-more" class="list-group-item"> | 84 | <div id="notification-see-more" class="list-group-item"> |
78 | <div class="row-content"> | 85 | <div class="row-content"> |
79 | - <p class="list-group-item-text">See More</p> | 86 | + <p class="list-group-item-text">{% trans 'See More' %}</p> |
80 | </div> | 87 | </div> |
81 | </a> | 88 | </a> |
82 | </li> | 89 | </li> |
@@ -93,7 +100,55 @@ | @@ -93,7 +100,55 @@ | ||
93 | <div class="container-fluid"> | 100 | <div class="container-fluid"> |
94 | <div class="row"> | 101 | <div class="row"> |
95 | <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2 col-xl-2"> | 102 | <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2 col-xl-2"> |
96 | - {% block sidebar %}{% endblock %} | 103 | + {% block sidebar %} |
104 | + <div class="panel panel-primary navigation"> | ||
105 | + <div class="panel-heading"> | ||
106 | + <h4>{% trans "Menu" %}</h4> | ||
107 | + </div> | ||
108 | + <div class="panel-body"> | ||
109 | + <ul class="nav nav-pills nav-stacked"> | ||
110 | + <li><a href="{% url 'app:index' %}">{% trans 'Home' %}</a></li> | ||
111 | + <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li> | ||
112 | + {% if user|has_role:'student' or not user.is_staff %} | ||
113 | + <li><a href="{% url 'course:manage' %}">{% trans 'My courses' %}</a></li> | ||
114 | + <li><a href="{% url 'core:all_courses' %}">{% trans 'All Courses' %}</a></li> | ||
115 | + {% endif %} | ||
116 | + <li><a href="{% url 'core:guest' %}">{% trans 'Courses' %}</a></li> | ||
117 | + {% if user|has_role:'system_admin' %} | ||
118 | + <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li> | ||
119 | + {% endif %} | ||
120 | + {% if user|has_role:'system_admin' or user|has_role:'professor' %} | ||
121 | + <li> | ||
122 | + <a href="#courses_list" class="accordion" data-toggle="collapse">{% trans 'Manage Courses' %}</a> | ||
123 | + <div id="courses_list" class="collapse"> | ||
124 | + <ul class="nav nav-pill nav-stacked accordion_list"> | ||
125 | + {% for course in courses_list %} | ||
126 | + <li><a href="{% url 'course:view' course.slug %}">{{ course }}</a></li> | ||
127 | + {% endfor %} | ||
128 | + </ul> | ||
129 | + </div> | ||
130 | + </li> | ||
131 | + {% endif %} | ||
132 | + </ul> | ||
133 | + </div> | ||
134 | + </div> | ||
135 | + | ||
136 | + {% if user|has_role:'professor' or user|has_role:'system_admin' %} | ||
137 | + | ||
138 | + <div class="panel panel-primary navigation"> | ||
139 | + <div class="panel-heading"> | ||
140 | + <h3 class="panel-title">{% trans 'Category' %}</h3> | ||
141 | + </div> | ||
142 | + <div class="panel-body"> | ||
143 | + <ul class="nav nav-pills nav-stacked"> | ||
144 | + <li><a href="{% url 'course:create_cat' %}">{% trans 'Create Category'%}</a></li> | ||
145 | + <li><a href="{% url 'course:manage_cat' %}">{% trans 'List Category' %}</a></li> | ||
146 | + </ul> | ||
147 | + </div> | ||
148 | + </div> | ||
149 | + | ||
150 | + {% endif %} | ||
151 | + {% endblock %} | ||
97 | </div> | 152 | </div> |
98 | <div class="col-xs-10 col-sm-10 col-md-10 col-lg-10 col-xl-10"> | 153 | <div class="col-xs-10 col-sm-10 col-md-10 col-lg-10 col-xl-10"> |
99 | {% block breadcrumbs %}{% endblock %} | 154 | {% block breadcrumbs %}{% endblock %} |
@@ -109,6 +164,10 @@ | @@ -109,6 +164,10 @@ | ||
109 | {% block script_file %} | 164 | {% block script_file %} |
110 | 165 | ||
111 | {% endblock script_file %} | 166 | {% endblock script_file %} |
167 | + | ||
168 | + {% block script_link %} | ||
169 | + | ||
170 | + {% endblock script_link %} | ||
112 | </body> | 171 | </body> |
113 | 172 | ||
114 | </html> | 173 | </html> |
core/templates/guest.html
1 | <!DOCTYPE html> | 1 | <!DOCTYPE html> |
2 | 2 | ||
3 | -{% load static i18n %} | 3 | + |
4 | {% load i18n custom_filters %} | 4 | {% load i18n custom_filters %} |
5 | +{% load static i18n %} | ||
5 | 6 | ||
6 | <html> | 7 | <html> |
7 | <head> | 8 | <head> |
8 | - <title>{{ title }}</title> | ||
9 | - | ||
10 | - <meta http-equiv="Cache-Control" content="no-cache, no-store" /> | ||
11 | - <link href="{% static 'img/topo-amadeus.png' %}" rel="shortcut icon" /> | ||
12 | - <!-- Roboto font --> | ||
13 | - <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:300,400,500,700" type="text/css"> | ||
14 | - <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> | ||
15 | - | ||
16 | - <!-- jQuery & jQuery UI --> | ||
17 | - <script type="text/javascript" src="{% static 'js/vendor/jquery-3.1.0.min.js' %}"></script> | ||
18 | - <script type="text/javascript" src="{% static 'js/vendor/jquery-ui.js' %}"></script> | ||
19 | - | ||
20 | - <!-- Bootstrap and themes (material) --> | ||
21 | - <link rel="stylesheet" type="text/css" href="{% static 'bootstrap-3.3.7/css/bootstrap.css' %}"> | ||
22 | - <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/material.min.css' %}"> | ||
23 | - <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/ripples.min.css' %}"> | ||
24 | - <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/datepicker.css' %}"> | ||
25 | - <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/alertifyjs/alertify.min.css' %}"> | ||
26 | - <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/alertifyjs/themes/bootstrap.css' %}"> | ||
27 | - <script type="text/javascript" src="{% static 'bootstrap-3.3.7/js/bootstrap.js' %}"></script> | ||
28 | - <script type="text/javascript" src="{% static 'js/vendor/bootstrap-acessibility.min.js' %}"></script> | ||
29 | - <script type="text/javascript" src="{% static 'js/vendor/material.min.js' %}"></script> | ||
30 | - <script type="text/javascript" src="{% static 'js/vendor/ripples.min.js' %}"></script> | ||
31 | - <script type="text/javascript" src="{% static 'js/vendor/bootstrap-datepicker.js' %}"></script> | ||
32 | - <script type="text/javascript" src="{% static 'js/vendor/alertify.min.js' %}"></script> | ||
33 | - | ||
34 | - <!-- Font awesome --> | ||
35 | - <link rel="stylesheet" type="text/css" href="{% static 'font-awesome-4.6.3/css/font-awesome.min.css' %}"> | ||
36 | - | ||
37 | - <!-- Custom styles --> | ||
38 | - <link rel="stylesheet" type="text/css" href="{% static 'css/base/amadeus.css' %}"> | ||
39 | - | ||
40 | - <!-- Init material Bootstrap --> | ||
41 | - <script type="text/javascript">$.material.init()</script> | ||
42 | - | ||
43 | - <!--Javascript block for specific-app ones --> | ||
44 | - <script src="{% static 'js/base/amadeus.js' %}"></script> | ||
45 | - {% block style %} | ||
46 | - {% endblock %} | ||
47 | - {% block javascript %} | ||
48 | - <script type="text/javascript" src="{% static 'js/course.js' %}"></script> | ||
49 | - {% endblock %} | 9 | + <title>{{ title }}</title> |
10 | + | ||
11 | + <meta http-equiv="Cache-Control" content="no-cache, no-store" /> | ||
12 | + <link href="{% static 'img/favicon.ico' %}" rel="shortcut icon" /> | ||
13 | + <!-- Roboto font --> | ||
14 | + <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:300,400,500,700" type="text/css"> | ||
15 | + <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> | ||
16 | + | ||
17 | + <!-- jQuery & jQuery UI --> | ||
18 | + <script type="text/javascript" src="{% static 'js/vendor/jquery-3.1.0.min.js' %}"></script> | ||
19 | + <script type="text/javascript" src="{% static 'js/vendor/jquery-ui.js' %}"></script> | ||
20 | + | ||
21 | + <!-- Bootstrap and themes (material) --> | ||
22 | + <link rel="stylesheet" type="text/css" href="{% static 'bootstrap-3.3.7/css/bootstrap.css' %}"> | ||
23 | + <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/material.min.css' %}"> | ||
24 | + <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/ripples.min.css' %}"> | ||
25 | + <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/datepicker.css' %}"> | ||
26 | + <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/alertifyjs/alertify.min.css' %}"> | ||
27 | + <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/alertifyjs/themes/bootstrap.css' %}"> | ||
28 | + <script type="text/javascript" src="{% static 'bootstrap-3.3.7/js/bootstrap.js' %}"></script> | ||
29 | + <script type="text/javascript" src="{% static 'js/vendor/bootstrap-acessibility.min.js' %}"></script> | ||
30 | + <script type="text/javascript" src="{% static 'js/vendor/material.min.js' %}"></script> | ||
31 | + <script type="text/javascript" src="{% static 'js/vendor/ripples.min.js' %}"></script> | ||
32 | + <script type="text/javascript" src="{% static 'js/vendor/bootstrap-datepicker.js' %}"></script> | ||
33 | + <script type="text/javascript" src="{% static 'js/vendor/alertify.min.js' %}"></script> | ||
34 | + | ||
35 | + <!-- Font awesome --> | ||
36 | + <link rel="stylesheet" type="text/css" href="{% static 'font-awesome-4.6.3/css/font-awesome.min.css' %}"> | ||
37 | + | ||
38 | + <!-- Custom styles --> | ||
39 | + <link rel="stylesheet" type="text/css" href="{% static 'css/base/amadeus.css' %}"> | ||
40 | + | ||
41 | + <!-- Init material Bootstrap --> | ||
42 | + <script type="text/javascript">$.material.init()</script> | ||
43 | + | ||
44 | + <!--Javascript block for specific-app ones --> | ||
45 | + <script src="{% static 'js/base/amadeus.js' %}"></script> | ||
46 | + {% block style %} | ||
47 | + {% endblock %} | ||
48 | + {% block javascript %} | ||
49 | + <script type="text/javascript" src="{% static 'js/course.js' %}"></script> | ||
50 | + {% endblock %} | ||
51 | + | ||
50 | </head> | 52 | </head> |
51 | <body> | 53 | <body> |
52 | - {% block nav %} | ||
53 | - <div class="navbar navbar-default"> | ||
54 | - <div class="navbar-header"> | ||
55 | - <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse"> | ||
56 | - <span class="icon-bar"></span> | ||
57 | - <span class="icon-bar"></span> | ||
58 | - <span class="icon-bar"></span> | ||
59 | - </button> | ||
60 | - <a class="navbar-brand" href="{% url 'app:index' %}"><img class="logo" src="{% static 'img/topo-amadeus-white.png' %}" alt="Logo"/></a> | ||
61 | - </div> | ||
62 | - <div class="navbar-collapse collapse navbar-responsive-collapse"> | ||
63 | - <ul class="nav navbar-nav navbar-right notifications"> | ||
64 | - <li class="" data-toggle="tooltip" data-placement="bottom" title data-original-title="notifications"> | 54 | + {% block nav %} |
55 | + <div class="navbar navbar-default"> | ||
56 | + <div class="navbar-header"> | ||
57 | + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse"> | ||
58 | + <span class="icon-bar"></span> | ||
59 | + <span class="icon-bar"></span> | ||
60 | + <span class="icon-bar"></span> | ||
61 | + </button> | ||
62 | + <a class="navbar-brand" href="{% url 'app:index' %}"><img class="logo" src="{% static 'img/topo-amadeus-white.png' %}" alt="Logo"/></a> | ||
63 | + </div> | ||
64 | + <div class="navbar-collapse collapse navbar-responsive-collapse"> | ||
65 | + <ul class="nav navbar-nav navbar-right notifications"> | ||
66 | + <li class="" data-toggle="tooltip" data-placement="bottom" title data-original-title="notifications"> | ||
65 | <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> | 67 | <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> |
66 | <ul id="notification-dropdown" class="dropdown-menu"> | 68 | <ul id="notification-dropdown" class="dropdown-menu"> |
67 | - <li class="dropdown-header">Notifications</li> | ||
68 | - {% include "notifications.html" %} | 69 | + <li class="dropdown-header">{% trans 'Notifications' %}</li> |
70 | + {% include "notifications.html" %} | ||
69 | 71 | ||
70 | - <li> | ||
71 | - <a onclick="getNotifications(5)"> | ||
72 | - <div id="notification-see-more" class="list-group-item"> | 72 | + <li> |
73 | + <a onclick="getNotifications(5)"> | ||
74 | + <div id="notification-see-more" class="list-group-item"> | ||
73 | <div class="row-content"> | 75 | <div class="row-content"> |
74 | - <p class="list-group-item-text">See More</p> | 76 | + <p class="list-group-item-text">{% trans 'See More' %}</p> |
75 | </div> | 77 | </div> |
76 | </a> | 78 | </a> |
77 | - </li> | 79 | + </li> |
78 | </ul> | 80 | </ul> |
79 | </li> | 81 | </li> |
80 | - | ||
81 | <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> | 82 | <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> |
82 | <li > <a class="link" href="{% url 'app:index' %}">{{ user }}</a></li> | 83 | <li > <a class="link" href="{% url 'app:index' %}">{{ user }}</a></li> |
83 | - | 84 | + <li data-toggle="tooltip" data-placement="bottom" title data-original-title="log out"> <a href="{% url 'app:index' %}"><i class="fa fa-sign-out" aria-hidden="true"></i></a></li> |
84 | </ul> | 85 | </ul> |
85 | </div> | 86 | </div> |
86 | </div> | 87 | </div> |
@@ -90,9 +91,9 @@ | @@ -90,9 +91,9 @@ | ||
90 | 91 | ||
91 | <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2 col-xl-2"> | 92 | <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2 col-xl-2"> |
92 | {% block sidebar %} | 93 | {% block sidebar %} |
93 | - <div class="panel panel-primary navigation"> | 94 | + <div class="panel panel-primary"> |
94 | <div class="panel-heading"> | 95 | <div class="panel-heading"> |
95 | - <h4>Menu</h4> | 96 | + <h4>{% trans 'Menu' %}</h4> |
96 | </div> | 97 | </div> |
97 | <div class="panel-body"> | 98 | <div class="panel-body"> |
98 | <ul class="nav nav-pills nav-stacked"> | 99 | <ul class="nav nav-pills nav-stacked"> |
@@ -119,9 +120,9 @@ | @@ -119,9 +120,9 @@ | ||
119 | </form> | 120 | </form> |
120 | </div> | 121 | </div> |
121 | 122 | ||
122 | - <div class="col-md-12"> | 123 | + <div class="col-md-10"> |
123 | <div class="btn-group btn-group-justified btn-group-raised"> | 124 | <div class="btn-group btn-group-justified btn-group-raised"> |
124 | - <a href="?category=all" class="btn btn-raised btn-info">Todos</a> | 125 | + <a href="?category=all" class="btn btn-raised btn-info">{% trans 'All' %}</a> |
125 | {% for category in categories %} | 126 | {% for category in categories %} |
126 | <a href="?category={{category.name}}" class="btn btn-raised btn-primary">{{category.name}}</a> | 127 | <a href="?category={{category.name}}" class="btn btn-raised btn-primary">{{category.name}}</a> |
127 | {% endfor %} | 128 | {% endfor %} |
@@ -132,7 +133,7 @@ | @@ -132,7 +133,7 @@ | ||
132 | {% block render_breadcrumbs %}{% endblock %} | 133 | {% block render_breadcrumbs %}{% endblock %} |
133 | <div> | 134 | <div> |
134 | </div> | 135 | </div> |
135 | - <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 col-xl-12"> | 136 | + <div class="col-xs-12 col-sm-12 col-md-10 col-lg-10 col-xl-12"> |
136 | {% block content %} | 137 | {% block content %} |
137 | {% for course in courses %} | 138 | {% for course in courses %} |
138 | <div class="panel panel-info panel_{{ course.id }}"> | 139 | <div class="panel panel-info panel_{{ course.id }}"> |
@@ -142,14 +143,14 @@ | @@ -142,14 +143,14 @@ | ||
142 | <a onclick="subscribe($(this), '{% url 'course:subscribe' course.slug %}', {{ course.id}}, '{% trans 'Are you sure you want to subscribe to this course?' %}')" class="btn btn-sm btn-primary btn-raised pull-right" style="margin-top:-4px">{% trans 'Subscribe' %}</a> | 143 | <a onclick="subscribe($(this), '{% url 'course:subscribe' course.slug %}', {{ course.id}}, '{% trans 'Are you sure you want to subscribe to this course?' %}')" class="btn btn-sm btn-primary btn-raised pull-right" style="margin-top:-4px">{% trans 'Subscribe' %}</a> |
143 | {% endif %} | 144 | {% endif %} |
144 | </div> | 145 | </div> |
145 | - | 146 | + |
146 | <div class="panel-body"> | 147 | <div class="panel-body"> |
147 | - <p><b>Course Name: </b>{{course.name}}</p> | ||
148 | - <p><b>Begining: </b>{{course.init_date}}</p> | ||
149 | - <p><b>End: </b>{{course.end_date}}</p> | ||
150 | - <p><b>Professor: </b>{{course.professors.name}}</p> | 148 | + <p><b>{% trans 'Course Name' %}: </b>{{course.name}}</p> |
149 | + <p><b>{% trans 'Begining' %}: </b>{{course.init_date}}</p> | ||
150 | + <p><b>{% trans 'End' %}: </b>{{course.end_date}}</p> | ||
151 | + <p><b>{% trans 'Professor' %}: </b>{{course.professors.name}}</p> | ||
151 | <p> | 152 | <p> |
152 | - <b>Description:</b> | 153 | + <b>{% trans 'Description' %}:</b> |
153 | <i> | 154 | <i> |
154 | {{course.content}} | 155 | {{course.content}} |
155 | </i> | 156 | </i> |
core/templates/index.html
@@ -42,7 +42,7 @@ | @@ -42,7 +42,7 @@ | ||
42 | </div> | 42 | </div> |
43 | <div class="col-md-12 col-xs-12 col-lg-10 col-lg-offset-1 col-sm-12"> | 43 | <div class="col-md-12 col-xs-12 col-lg-10 col-lg-offset-1 col-sm-12"> |
44 | <div class="form-group"> | 44 | <div class="form-group"> |
45 | - <label for="inputPassword" class="control-label"> {% trans 'Password' %}</label> | 45 | + <label for="inputPassword" class="control-label"> {% trans 'password' %}</label> |
46 | <input form="form-login" for="inputSmall" type="password" name="password" class="form-control" id="inputPassword" placeholder="Password"> | 46 | <input form="form-login" for="inputSmall" type="password" name="password" class="form-control" id="inputPassword" placeholder="Password"> |
47 | </div> | 47 | </div> |
48 | </div> | 48 | </div> |
@@ -61,7 +61,7 @@ | @@ -61,7 +61,7 @@ | ||
61 | <a class="btn btn-default btn-raised btn-block" href="{% url 'core:guest' %}" formaction="#" style="position: initial;">{% trans 'Guest' %}</a> | 61 | <a class="btn btn-default btn-raised btn-block" href="{% url 'core:guest' %}" formaction="#" style="position: initial;">{% trans 'Guest' %}</a> |
62 | </div> | 62 | </div> |
63 | <div class="col-md-10 col-sm-10 col-xs-10 col-lg-6 col-lg-offset-7 forgotPassword"> | 63 | <div class="col-md-10 col-sm-10 col-xs-10 col-lg-6 col-lg-offset-7 forgotPassword"> |
64 | - <a href="{% url 'core:password_reset' %}">{% trans "Forgot your password?" %}</a> | 64 | + <a href="{% url 'core:password_reset' %}">{% trans 'Forgot your password?' %}</a> |
65 | </div> | 65 | </div> |
66 | </div> | 66 | </div> |
67 | </div> | 67 | </div> |
core/templates/lembrar_senha.html
@@ -37,7 +37,7 @@ Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título | @@ -37,7 +37,7 @@ Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título | ||
37 | 37 | ||
38 | 38 | ||
39 | 39 | ||
40 | - <title>Projeto Amadeus</title> | 40 | + <title>{% trans 'Amadeus Project' %}</title> |
41 | 41 | ||
42 | <meta http-equiv="Cache-Control" content="no-cache, no-store" /> | 42 | <meta http-equiv="Cache-Control" content="no-cache, no-store" /> |
43 | 43 | ||
@@ -62,7 +62,7 @@ Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título | @@ -62,7 +62,7 @@ Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título | ||
62 | <form name="logonForm" method="post" action="/amadeuslms/validateLogin.do"> | 62 | <form name="logonForm" method="post" action="/amadeuslms/validateLogin.do"> |
63 | <dt><input type="text" name="login" maxlength="15" size="15" value="" class="inputlogin"> </dt> | 63 | <dt><input type="text" name="login" maxlength="15" size="15" value="" class="inputlogin"> </dt> |
64 | <dt><input type="password" name="password" maxlength="15" size="15" value="" class="inputlogin"> | 64 | <dt><input type="password" name="password" maxlength="15" size="15" value="" class="inputlogin"> |
65 | - <br /><a href="{% url 'index' %}" name="logonForm" class="button">Entrar</a></dt> | 65 | + <br /><a href="{% url 'index' %}" name="logonForm" class="button">{% trans 'Enter' %}</a></dt> |
66 | </form> | 66 | </form> |
67 | <script type="text/javascript" language="JavaScript"> | 67 | <script type="text/javascript" language="JavaScript"> |
68 | <!-- | 68 | <!-- |
@@ -98,23 +98,23 @@ Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título | @@ -98,23 +98,23 @@ Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título | ||
98 | 98 | ||
99 | <div id="institutional_menu"> | 99 | <div id="institutional_menu"> |
100 | 100 | ||
101 | - <span><a href="/amadeuslms/fProject.do" target="_blank">O Projeto</a></span> | 101 | + <span><a href="/amadeuslms/fProject.do" target="_blank">{% trans 'The Project' %}</a></span> |
102 | <span> | </span> | 102 | <span> | </span> |
103 | - <span><a href="/amadeuslms/fCCTE.do" target="_blank">Grupo CCTE</a></span> | 103 | + <span><a href="/amadeuslms/fCCTE.do" target="_blank">{% trans 'CCTE Group' %}</a></span> |
104 | </div> | 104 | </div> |
105 | <div id="pTitle" class="pTitle"> | 105 | <div id="pTitle" class="pTitle"> |
106 | - <h2>Lembrar senha</h2> | 106 | + <h2>{% trans 'Remember password' %}</h2> |
107 | </div> | 107 | </div> |
108 | <div id="pBreadCrumbs" class="pBreadCrumbs"> | 108 | <div id="pBreadCrumbs" class="pBreadCrumbs"> |
109 | <ul id="breadcrumb"> | 109 | <ul id="breadcrumb"> |
110 | - <li><a href="{% url 'home' %}">Página Inicial</a></li> | ||
111 | - <li>Lembrar senha</li> | 110 | + <li><a href="{% url 'home' %}">{% trans 'Home' %}</a></li> |
111 | + <li>{%trans 'Remember password' %}</li> | ||
112 | </ul> | 112 | </ul> |
113 | </div> | 113 | </div> |
114 | <div id="pLeftMenu" class="pLeftMenu"> | 114 | <div id="pLeftMenu" class="pLeftMenu"> |
115 | <div id="side_menu_1"> | 115 | <div id="side_menu_1"> |
116 | <ul id="menu_sessoes"> | 116 | <ul id="menu_sessoes"> |
117 | - <li><a href="{% url 'create_account' %}" class="insert">Nova conta</a></li> | 117 | + <li><a href="{% url 'create_account' %}" class="insert">{% trans 'New account' %}</a></li> |
118 | </ul> | 118 | </ul> |
119 | </div> | 119 | </div> |
120 | </div> | 120 | </div> |
@@ -123,9 +123,9 @@ Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título | @@ -123,9 +123,9 @@ Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título | ||
123 | 123 | ||
124 | 124 | ||
125 | <form name="remindPasswordForm" method="post" action="/amadeuslms/remindPassword.do"> | 125 | <form name="remindPasswordForm" method="post" action="/amadeuslms/remindPassword.do"> |
126 | - <dt>Endereço de e-mail</dt> | 126 | + <dt>{% trans 'Email' %}</dt> |
127 | <dd><input type="text" name="email" value="" class="formfield2" id="username"></dd> | 127 | <dd><input type="text" name="email" value="" class="formfield2" id="username"></dd> |
128 | - <dd class="description">Seu endereço de e-mail (exemplo@mail.com)</dd> | 128 | + <dd class="description">{% trans 'Your Email address (exemple@mail.com)' %}</dd> |
129 | <dt class="field"><input type="submit" name="remindPassword" value="Enviar e-mail" class="button"></dt> | 129 | <dt class="field"><input type="submit" name="remindPassword" value="Enviar e-mail" class="button"></dt> |
130 | </form> | 130 | </form> |
131 | <script type="text/javascript" language="JavaScript"> | 131 | <script type="text/javascript" language="JavaScript"> |
@@ -160,7 +160,7 @@ Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título | @@ -160,7 +160,7 @@ Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título | ||
160 | 160 | ||
161 | 161 | ||
162 | <div id="footnote"> | 162 | <div id="footnote"> |
163 | - <dl><dd>Copyright Amadeus. Todos os direitos reservados<dd></dl> | 163 | + <dl><dd>{% trans 'Copyright Amadeus. All rights reserved' %}<dd></dl> |
164 | </div> | 164 | </div> |
165 | 165 | ||
166 | </div> | 166 | </div> |
core/templates/register_user.html
@@ -6,6 +6,10 @@ | @@ -6,6 +6,10 @@ | ||
6 | {% block nav %} | 6 | {% block nav %} |
7 | {% endblock %} | 7 | {% endblock %} |
8 | 8 | ||
9 | +{% block sidebar %} | ||
10 | + | ||
11 | +{% endblock sidebar %} | ||
12 | + | ||
9 | 13 | ||
10 | {% block content %} | 14 | {% block content %} |
11 | {% if messages %} | 15 | {% if messages %} |
@@ -19,84 +23,81 @@ | @@ -19,84 +23,81 @@ | ||
19 | {% endfor %} | 23 | {% endfor %} |
20 | {% endif %} | 24 | {% endif %} |
21 | <div class="row"> | 25 | <div class="row"> |
22 | - <div class="col-sm-6 col-sm-offset-4 col-md-6 col-md-offset-4 col-xs-6 col-xs-offset-4 col-lg-6 col-lg-offset-4 col-xl-6 col-xl-offset-4 "> | ||
23 | - <div class="col-sm-8 col-sm-offset-2 col-md-8 col-md-offset-2 col-xs-8 col-xs-offset-2 col-lg-8 col-lg-offset-2 col-xl-8 col-xl-offset-2"> | ||
24 | - <img src="{% static 'img/amadeus.png' %}" class="img-responsive center-block logo-login " alt="logo amadeus"> | ||
25 | - </div> | ||
26 | - </div> | 26 | + <div class="col-lg-offset-4 col-lg-8 col-md-offset-4 col-md-8 col-xs-offset-4 col-xs-8 col-sm-offset-4 col-sm-8"> |
27 | + <div class="col-lg-8 col-md-8 col-xs-8 col-sm-8"> | ||
28 | + <img src="{% static 'img/amadeus.png' %}" class="img-responsive center-block " alt="logo amadeus" id="logo"> | ||
29 | + </div> | ||
30 | + </div> | ||
27 | </div> | 31 | </div> |
28 | 32 | ||
29 | <div class="row"> | 33 | <div class="row"> |
30 | - <div class="col-md-8 col-md-offset-3 col-sm-10 col-sm-offset-2 col-xs-12 col-xs-offset-1 col-lg-10 col-lg-offset-2 col-xl-8 col-xl-offset-3"> | 34 | + <div class="col-lg-8 col-lg-offset-3 col-md-8 col-md-offset-3 col-sm-8 col-sm-offset-3 col-xs-8 col-xs-offset-3"> |
31 | <div class="card"> | 35 | <div class="card"> |
32 | - <div class="card-content"> | ||
33 | <div class="card-body"> | 36 | <div class="card-body"> |
34 | - <form class="form-horizontal" name="registerForm" method="post" id="register-user" enctype="multipart/form-data"> | 37 | + <form class="form-horizontal" name="registerForm" method="post" action="" enctype="multipart/form-data"> |
35 | {% csrf_token %} | 38 | {% csrf_token %} |
36 | - <h2>{% trans 'User Register' %}</h2> | ||
37 | - <hr> | 39 | + <legend>{% trans 'User Register' %}</legend> |
40 | + {% for field in form %} | ||
38 | <div class="row"> | 41 | <div class="row"> |
39 | - <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12"> | ||
40 | - {% for field in form %} | ||
41 | - <div class="form-group {% if form.has_error %} has-error {% endif %} is-fileinput block-register-inline"> | ||
42 | - {% if field.field.required %} | ||
43 | - <label for="{{ field.auto_id }}" class="col-md-4 control-label">{{ field.label }}<span>*</span></label> | ||
44 | - {% else %} | ||
45 | - <label for="{{ field.auto_id }}" class="col-md-4 control-label">{{ field.label }}</label> | ||
46 | - {% endif %} | ||
47 | - <div class="col-md-8 col-lg-10 col-lg-offset-2"> | ||
48 | - {% if field.auto_id == 'id_birth_date' %} | ||
49 | - {% render_field field class='form-control input-sm date-picker' %} | ||
50 | - <span id="helpBlock" class="help-block">{{ field.help_text }}</span> | ||
51 | - {% elif field.auto_id == 'id_image' %} | ||
52 | - {% render_field field class='form-control input-sm' %} | ||
53 | - <div class="input-group"> | ||
54 | - <input type="text" readonly="" class="form-control" placeholder="Choose your photo..."> | ||
55 | - <span class="input-group-btn input-group-sm"> | ||
56 | - <button type="button" class="btn btn-fab btn-fab-mini"> | ||
57 | - <i class="material-icons">attach_file</i> | ||
58 | - </button> | ||
59 | - </span> | ||
60 | - </div> | ||
61 | - {% elif field.auto_id == 'id_cpf' %} | ||
62 | - {% render_field field class='form-control' onkeypress='campoNumerico(this,event); formatarCpf(this,event);' %} | ||
63 | - | ||
64 | - {% elif field.auto_id == 'id_phone' %} | ||
65 | - {% render_field field class='form-control' onkeypress='campoNumerico(this,event); formatarTelefone(this,event);' %} | ||
66 | - {% else %} | ||
67 | - {% render_field field class='form-control' %} | ||
68 | - <span id="helpBlock" class="help-block">{{ field.help_text }}</span> | ||
69 | - {% endif %} | ||
70 | - </div> | 42 | + <div class="form-group is-empty {% if form.has_error %} has-error {% endif %} is-fileinput"> |
43 | + {% if field.field.required %} | ||
44 | + <label for="{{ field.auto_id }}" class="col-md-2 control-label">{{ field.label }}<span>*</span></label> | ||
45 | + {% else %} | ||
46 | + <label for="{{ field.auto_id }}" class="col-md-2 control-label">{{ field.label }}</label> | ||
47 | + {% endif %} | ||
48 | + <div class="col-md-10"> | ||
49 | + {% if field.auto_id == 'id_birth_date' %} | ||
50 | + {% render_field field class='form-control input-sm date-picker' %} | ||
51 | + | ||
52 | + <span id="helpBlock" class="help-block">{{ field.help_text }}</span> | ||
53 | + {% elif field.auto_id == 'id_image' %} | ||
54 | + {% render_field field class='form-control input-sm' %} | ||
55 | + <div class="input-group"> | ||
56 | + <input type="text" readonly="" class="form-control" placeholder="Choose your photo..."> | ||
57 | + <span class="input-group-btn input-group-sm"> | ||
58 | + <button type="button" class="btn btn-fab btn-fab-mini"> | ||
59 | + <i class="material-icons">attach_file</i> | ||
60 | + </button> | ||
61 | + </span> | ||
62 | + </div> | ||
63 | + {% elif field.auto_id == 'id_cpf' %} | ||
64 | + {% render_field field class='form-control' onkeypress='campoNumerico(this,event); formatarCpf(this,event);' %} | ||
71 | 65 | ||
72 | - {% if field.errors %} | ||
73 | - <div class="alert alert-danger alert-dismissible col-md-offset-4 col-md-8" role="alert"> | ||
74 | - <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | ||
75 | - <span aria-hidden="true">×</span> | ||
76 | - </button> | ||
77 | - <ul> | ||
78 | - {% for error in field.errors %} | ||
79 | - <li>{{ error }}</li> | ||
80 | - {% endfor %} | ||
81 | - </ul> | ||
82 | - </div> | ||
83 | - {% endif %} | ||
84 | - </div> | 66 | + {% elif field.auto_id == 'id_phone' %} |
67 | + {% render_field field class='form-control' onkeypress='campoNumerico(this,event); formatarTelefone(this,event);' %} | ||
68 | + {% else %} | ||
69 | + {% render_field field class='form-control' %} | ||
70 | + <span id="helpBlock" class="help-block">{{ field.help_text }}</span> | ||
71 | + {% endif %} | ||
72 | + </div> | ||
73 | + | ||
74 | + {% if field.errors %} | ||
75 | + <div class="alert alert-danger alert-dismissible col-md-offset-1 col-md-10 col-sm-offset-1 col-sm-10 col-xs-offset-1 col-xs-10" role="alert"> | ||
76 | + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | ||
77 | + <span aria-hidden="true">×</span> | ||
78 | + </button> | ||
79 | + <ul> | ||
80 | + {% for error in field.errors %} | ||
81 | + <li>{{ error }}</li> | ||
85 | {% endfor %} | 82 | {% endfor %} |
86 | - <div class="col-md-6 col-xs-6 col-sm-6 col-lg-5 col-lg-offset-1 text-center"> | ||
87 | - <input type="submit" value="{% trans 'Save' %}" class="btn btn-success btn-raised" /> | ||
88 | - </div> | ||
89 | - <div class="col-md-6 col-xs-6 col-sm-6 col-lg-5 text-center"> | ||
90 | - <a href="{% url 'core:home' %}" class="btn btn-default btn-raised" >{% trans 'Cancel' %}</a> | ||
91 | - </div> | 83 | + </ul> |
92 | </div> | 84 | </div> |
85 | + {% endif %} | ||
86 | + </div> | ||
93 | </div> | 87 | </div> |
88 | + {% endfor %} | ||
89 | + <div class="col-md-offset-2 col-md-6 col-sm-offset-2 col-sm-6 col-xs-6 col-xs-offset-2 col-xs-6"> | ||
90 | + <input type="submit" value="{% trans 'Save' %}" class="btn btn-raised btn-primary" /> | ||
91 | + </div> | ||
92 | + <div class=" col-md-4 col-sm-4 col-xs-4"> | ||
93 | + <a href="{% url 'core:home' %}" class=" btn btn-danger btn-raised" >{% trans 'Cancel' %}</a> | ||
94 | + </div> | ||
95 | + | ||
94 | </form> | 96 | </form> |
95 | </div> | 97 | </div> |
96 | - </div> | ||
97 | </div> | 98 | </div> |
98 | </div> | 99 | </div> |
99 | </div> | 100 | </div> |
100 | - | 101 | + |
101 | <br clear="all" /> | 102 | <br clear="all" /> |
102 | {% endblock %} | 103 | {% endblock %} |
core/templates/registration/passwor_reset_email.html
1 | -To initiate the password reset process for your {{ user.get_username }} TestSite Account, | ||
2 | -click the link below: | 1 | +{% load static i18n %} |
2 | + | ||
3 | +{% trans 'To initiate the password reset process for your {{ user.get_username }} TestSite Account, | ||
4 | +click the link below:' %} | ||
3 | 5 | ||
4 | {% block reset_link %} | 6 | {% block reset_link %} |
5 | {{ protocol }}://{{ domain }}{% url 'core:password_reset_confirm' uidb64=uid token=token %} | 7 | {{ protocol }}://{{ domain }}{% url 'core:password_reset_confirm' uidb64=uid token=token %} |
6 | 8 | ||
7 | {% endblock %} | 9 | {% endblock %} |
8 | 10 | ||
9 | -If clicking the link above doesn't work, please copy and paste the URL in a new browser | 11 | +{% trans 'If clicking the link above doesnt work, please copy and paste the URL in a new browser |
10 | window instead. | 12 | window instead. |
11 | 13 | ||
12 | 14 | ||
13 | Sincerely, | 15 | Sincerely, |
14 | -Amadeus. | 16 | +Amadeus.' %} |
core/views.py
@@ -54,7 +54,7 @@ def remember_password(request): | @@ -54,7 +54,7 @@ def remember_password(request): | ||
54 | registration = request.POST['registration'] | 54 | registration = request.POST['registration'] |
55 | if email and registration: | 55 | if email and registration: |
56 | subject = _('Recover your password') | 56 | subject = _('Recover your password') |
57 | - message = _('Hello %s, \nRecover your password to use your account.\nNumber of registration: %s\nLink for recuver password.\n\nRespectfully,\nTeam Amadeus.' % (request.user,registration)) | 57 | + message = _('Hello {0}, \nRecover your password to use your account.\nNumber of registration: {1}\nLink for recuver password.\n\nRespectfully,\nTeam Amadeus.'.format(request.user,registration)) |
58 | try: | 58 | try: |
59 | send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [email],fail_silently=False) | 59 | send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [email],fail_silently=False) |
60 | context['success'] = 'Email successfully sent' | 60 | context['success'] = 'Email successfully sent' |
courses/locale/he_il/LC_MESSAGES/django.po
@@ -1,229 +0,0 @@ | @@ -1,229 +0,0 @@ | ||
1 | -# SOME DESCRIPTIVE TITLE. | ||
2 | -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||
3 | -# This file is distributed under the same license as the PACKAGE package. | ||
4 | -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||
5 | -# | ||
6 | -#, fuzzy | ||
7 | -msgid "" | ||
8 | -msgstr "" | ||
9 | -"Project-Id-Version: PACKAGE VERSION\n" | ||
10 | -"Report-Msgid-Bugs-To: \n" | ||
11 | -"POT-Creation-Date: 2016-09-16 02:41-0300\n" | ||
12 | -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||
13 | -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||
14 | -"Language-Team: LANGUAGE <LL@li.org>\n" | ||
15 | -"Language: \n" | ||
16 | -"MIME-Version: 1.0\n" | ||
17 | -"Content-Type: text/plain; charset=UTF-8\n" | ||
18 | -"Content-Transfer-Encoding: 8bit\n" | ||
19 | - | ||
20 | -#: courses/templates/category/create.html:8 | ||
21 | -#: courses/templates/category/delete.html:7 | ||
22 | -#: courses/templates/category/index.html:7 | ||
23 | -#: courses/templates/category/update.html:8 | ||
24 | -#: courses/templates/category/view.html:7 | ||
25 | -#: courses/templates/course/create.html:8 | ||
26 | -#: courses/templates/course/delete.html:7 courses/templates/course/home.html:8 | ||
27 | -#: courses/templates/course/update.html:8 | ||
28 | -#: courses/templates/course/view.html:39 | ||
29 | -#: courses/templates/subject/index.html:8 | ||
30 | -msgid "Home" | ||
31 | -msgstr "" | ||
32 | - | ||
33 | -#: courses/templates/category/create.html:9 | ||
34 | -#: courses/templates/category/delete.html:18 | ||
35 | -#: courses/templates/category/index.html:18 | ||
36 | -#: courses/templates/category/view.html:18 | ||
37 | -msgid "Create Category" | ||
38 | -msgstr "" | ||
39 | - | ||
40 | -#: courses/templates/category/create.html:16 | ||
41 | -#: courses/templates/category/delete.html:15 | ||
42 | -#: courses/templates/category/index.html:15 | ||
43 | -#: courses/templates/category/update.html:16 | ||
44 | -#: courses/templates/category/view.html:15 | ||
45 | -msgid "Categories" | ||
46 | -msgstr "" | ||
47 | - | ||
48 | -#: courses/templates/category/create.html:26 | ||
49 | -#: courses/templates/category/update.html:26 | ||
50 | -#: courses/templates/course/create.html:26 | ||
51 | -#: courses/templates/course/update.html:32 | ||
52 | -msgid "All fields are required" | ||
53 | -msgstr "" | ||
54 | - | ||
55 | -#: courses/templates/category/create.html:51 | ||
56 | -#: courses/templates/category/update.html:51 | ||
57 | -#: courses/templates/course/create.html:51 | ||
58 | -#: courses/templates/course/update.html:57 | ||
59 | -msgid "Save" | ||
60 | -msgstr "" | ||
61 | - | ||
62 | -#: courses/templates/category/delete.html:8 | ||
63 | -#: courses/templates/category/index.html:8 | ||
64 | -msgid "Manage Categories" | ||
65 | -msgstr "" | ||
66 | - | ||
67 | -#: courses/templates/category/delete.html:26 | ||
68 | -#: courses/templates/subject/delete.html:11 | ||
69 | -msgid "Are you sure you want to delete the category" | ||
70 | -msgstr "" | ||
71 | - | ||
72 | -#: courses/templates/category/delete.html:27 | ||
73 | -#: courses/templates/course/delete.html:28 | ||
74 | -#: courses/templates/subject/delete.html:12 | ||
75 | -msgid "Yes" | ||
76 | -msgstr "" | ||
77 | - | ||
78 | -#: courses/templates/category/delete.html:28 | ||
79 | -#: courses/templates/course/delete.html:29 | ||
80 | -#: courses/templates/subject/delete.html:13 | ||
81 | -msgid "No" | ||
82 | -msgstr "" | ||
83 | - | ||
84 | -#: courses/templates/category/index.html:38 | ||
85 | -msgid "Name" | ||
86 | -msgstr "" | ||
87 | - | ||
88 | -#: courses/templates/category/index.html:39 | ||
89 | -msgid "Slug" | ||
90 | -msgstr "" | ||
91 | - | ||
92 | -#: courses/templates/category/index.html:40 | ||
93 | -msgid "Actions" | ||
94 | -msgstr "" | ||
95 | - | ||
96 | -#: courses/templates/category/index.html:59 | ||
97 | -msgid "No categories found" | ||
98 | -msgstr "" | ||
99 | - | ||
100 | -#: courses/templates/category/update.html:9 | ||
101 | -#: courses/templates/category/view.html:21 | ||
102 | -msgid "Edit Category" | ||
103 | -msgstr "" | ||
104 | - | ||
105 | -#: courses/templates/category/view.html:24 | ||
106 | -msgid "Remove Category" | ||
107 | -msgstr "" | ||
108 | - | ||
109 | -#: courses/templates/category/view.html:32 | ||
110 | -msgid "Name:" | ||
111 | -msgstr "" | ||
112 | - | ||
113 | -#: courses/templates/category/view.html:33 | ||
114 | -msgid "Slug:" | ||
115 | -msgstr "" | ||
116 | - | ||
117 | -#: courses/templates/course/create.html:9 | ||
118 | -#: courses/templates/course/delete.html:18 | ||
119 | -#: courses/templates/course/filtered.html:11 | ||
120 | -#: courses/templates/course/index.html:19 | ||
121 | -msgid "Create Course" | ||
122 | -msgstr "" | ||
123 | - | ||
124 | -#: courses/templates/course/create.html:16 | ||
125 | -#: courses/templates/course/delete.html:15 | ||
126 | -#: courses/templates/course/filtered.html:8 | ||
127 | -#: courses/templates/course/home.html:16 | ||
128 | -#: courses/templates/course/index.html:16 | ||
129 | -#: courses/templates/course/update.html:16 | ||
130 | -#: courses/templates/course/view.html:48 | ||
131 | -msgid "Courses" | ||
132 | -msgstr "" | ||
133 | - | ||
134 | -#: courses/templates/course/delete.html:27 | ||
135 | -msgid "Are you sure you want to delete the couse" | ||
136 | -msgstr "" | ||
137 | - | ||
138 | -#: courses/templates/course/filtered.html:19 | ||
139 | -#: courses/templates/course/index.html:27 | ||
140 | -msgid "Categories:" | ||
141 | -msgstr "" | ||
142 | - | ||
143 | -#: courses/templates/course/home.html:9 | ||
144 | -msgid "Home Course" | ||
145 | -msgstr "" | ||
146 | - | ||
147 | -#: courses/templates/course/index.html:81 | ||
148 | -msgid "students tops" | ||
149 | -msgstr "" | ||
150 | - | ||
151 | -#: courses/templates/course/index.html:87 | ||
152 | -msgid "Subscribe Period:" | ||
153 | -msgstr "" | ||
154 | - | ||
155 | -#: courses/templates/course/index.html:89 | ||
156 | -msgid "Period:" | ||
157 | -msgstr "" | ||
158 | - | ||
159 | -#: courses/templates/course/index.html:105 | ||
160 | -msgid "No courses found" | ||
161 | -msgstr "" | ||
162 | - | ||
163 | -#: courses/templates/course/update.html:9 | ||
164 | -msgid "Edit Course" | ||
165 | -msgstr "" | ||
166 | - | ||
167 | -#: courses/templates/course/update.html:19 | ||
168 | -msgid "Manage Modules" | ||
169 | -msgstr "" | ||
170 | - | ||
171 | -#: courses/templates/course/update.html:22 | ||
172 | -msgid "Participants" | ||
173 | -msgstr "" | ||
174 | - | ||
175 | -#: courses/templates/course/view.html:40 | ||
176 | -msgid "Profile" | ||
177 | -msgstr "" | ||
178 | - | ||
179 | -#: courses/templates/course/view.html:62 | ||
180 | -msgid "Subjects" | ||
181 | -msgstr "" | ||
182 | - | ||
183 | -#: courses/templates/course/view.html:85 | ||
184 | -msgid "Professor" | ||
185 | -msgstr "" | ||
186 | - | ||
187 | -#: courses/templates/course/view.html:88 | ||
188 | -msgid "Description" | ||
189 | -msgstr "" | ||
190 | - | ||
191 | -#: courses/templates/course/view.html:110 | ||
192 | -#: courses/templates/subject/index.html:78 | ||
193 | -msgid "Pending Stuffs" | ||
194 | -msgstr "" | ||
195 | - | ||
196 | -#: courses/templates/course/view.html:113 | ||
197 | -msgid "No pending tasks at the moment." | ||
198 | -msgstr "" | ||
199 | - | ||
200 | -#: courses/templates/subject/create.html:20 | ||
201 | -#: courses/templates/topic/create.html:20 | ||
202 | -msgid "Create" | ||
203 | -msgstr "" | ||
204 | - | ||
205 | -#: courses/templates/subject/form_view_teacher.html:10 | ||
206 | -#: courses/templates/subject/index.html:47 | ||
207 | -msgid "edit" | ||
208 | -msgstr "" | ||
209 | - | ||
210 | -#: courses/templates/subject/index.html:10 | ||
211 | -msgid "Manage Subjects" | ||
212 | -msgstr "" | ||
213 | - | ||
214 | -#: courses/templates/subject/index.html:34 | ||
215 | -msgid "Create Subject" | ||
216 | -msgstr "" | ||
217 | - | ||
218 | -#: courses/templates/subject/index.html:52 | ||
219 | -msgid "delete" | ||
220 | -msgstr "" | ||
221 | - | ||
222 | -#: courses/templates/subject/index.html:71 | ||
223 | -msgid "Create Topic" | ||
224 | -msgstr "" | ||
225 | - | ||
226 | -#: courses/templates/subject/update.html:20 | ||
227 | -#: courses/templates/topic/update.html:20 | ||
228 | -msgid "Update" | ||
229 | -msgstr "" |
courses/locale/pt_BR/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid "" | @@ -8,7 +8,7 @@ msgid "" | ||
8 | msgstr "" | 8 | msgstr "" |
9 | "Project-Id-Version: PACKAGE VERSION\n" | 9 | "Project-Id-Version: PACKAGE VERSION\n" |
10 | "Report-Msgid-Bugs-To: \n" | 10 | "Report-Msgid-Bugs-To: \n" |
11 | -"POT-Creation-Date: 2016-09-07 00:13-0300\n" | 11 | +"POT-Creation-Date: 2016-10-26 14:47-0300\n" |
12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | 13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
14 | "Language-Team: LANGUAGE <LL@li.org>\n" | 14 | "Language-Team: LANGUAGE <LL@li.org>\n" |
@@ -18,290 +18,564 @@ msgstr "" | @@ -18,290 +18,564 @@ msgstr "" | ||
18 | "Content-Transfer-Encoding: 8bit\n" | 18 | "Content-Transfer-Encoding: 8bit\n" |
19 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" | 19 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" |
20 | 20 | ||
21 | -#: courses/forms.py:11 courses/forms.py:25 courses/forms.py:58 | ||
22 | -#: courses/models.py:7 courses/models.py:20 courses/models.py:44 | ||
23 | -#: courses/templates/category/index.html:38 | 21 | +#: courses/forms.py:13 courses/forms.py:56 courses/forms.py:96 |
22 | +#: courses/forms.py:133 courses/forms.py:153 courses/models.py:14 | ||
23 | +#: courses/models.py:26 courses/models.py:39 courses/models.py:75 | ||
24 | +#: courses/models.py:103 courses/models.py:165 | ||
25 | +#: courses/templates/course/replicate.html:18 | ||
26 | +#: courses/templates/subject/form_view_teacher.html:224 | ||
27 | +#: courses/templates/subject/form_view_teacher.html:279 | ||
24 | msgid "Name" | 28 | msgid "Name" |
25 | msgstr "Nome" | 29 | msgstr "Nome" |
26 | 30 | ||
27 | -#: courses/forms.py:14 | ||
28 | -msgid "Category name" | ||
29 | -msgstr "" | 31 | +#: courses/forms.py:16 |
32 | +#, fuzzy | ||
33 | +#| msgid "Category name" | ||
34 | +msgid "CourseCategory name" | ||
35 | +msgstr "Nome da categoria" | ||
36 | + | ||
37 | +#: courses/forms.py:26 courses/forms.py:42 | ||
38 | +msgid "The end date may not be before the start date." | ||
39 | +msgstr "A data final não pode anteceder a data inicial." | ||
40 | + | ||
41 | +#: courses/forms.py:34 | ||
42 | +msgid "The course start date must be after the end of registration." | ||
43 | +msgstr "A data de início do curso deve ocorrer após as inscrições." | ||
30 | 44 | ||
31 | -#: courses/forms.py:26 | 45 | +#: courses/forms.py:57 courses/forms.py:97 |
46 | +#: courses/templates/course/replicate.html:28 | ||
32 | msgid "Objectives" | 47 | msgid "Objectives" |
33 | msgstr "Objetivos" | 48 | msgstr "Objetivos" |
34 | 49 | ||
35 | -#: courses/forms.py:27 courses/models.py:23 | 50 | +#: courses/forms.py:58 courses/forms.py:98 courses/models.py:42 |
51 | +#: courses/templates/course/replicate.html:37 | ||
36 | msgid "Content" | 52 | msgid "Content" |
37 | msgstr "Conteúdo" | 53 | msgstr "Conteúdo" |
38 | 54 | ||
39 | -#: courses/forms.py:28 | 55 | +#: courses/forms.py:59 courses/forms.py:99 |
56 | +#: courses/templates/course/replicate.html:47 | ||
40 | msgid "Number of studets maximum" | 57 | msgid "Number of studets maximum" |
41 | msgstr "Número máximo de estudantes" | 58 | msgstr "Número máximo de estudantes" |
42 | 59 | ||
43 | -#: courses/forms.py:29 | 60 | +#: courses/forms.py:60 courses/forms.py:100 |
61 | +#: courses/templates/course/replicate.html:57 | ||
44 | msgid "Course registration start date" | 62 | msgid "Course registration start date" |
45 | msgstr "Início das inscrições" | 63 | msgstr "Início das inscrições" |
46 | 64 | ||
47 | -#: courses/forms.py:30 | 65 | +#: courses/forms.py:61 courses/forms.py:101 |
66 | +#: courses/templates/course/replicate.html:67 | ||
48 | msgid "Course registration end date" | 67 | msgid "Course registration end date" |
49 | msgstr "Fim da Inscrições" | 68 | msgstr "Fim da Inscrições" |
50 | 69 | ||
51 | -#: courses/forms.py:31 | 70 | +#: courses/forms.py:62 courses/forms.py:102 |
71 | +#: courses/templates/course/replicate.html:77 | ||
52 | msgid "Course start date" | 72 | msgid "Course start date" |
53 | msgstr "Data de inicio do Curso" | 73 | msgstr "Data de inicio do Curso" |
54 | 74 | ||
55 | -#: courses/forms.py:32 | 75 | +#: courses/forms.py:63 courses/forms.py:103 |
76 | +#: courses/templates/course/replicate.html:87 | ||
56 | msgid "Course end date" | 77 | msgid "Course end date" |
57 | msgstr "Data de termino do curso" | 78 | msgstr "Data de termino do curso" |
58 | 79 | ||
59 | -#: courses/forms.py:33 courses/models.py:30 | 80 | +#: courses/forms.py:64 courses/forms.py:104 courses/models.py:49 |
60 | msgid "Image" | 81 | msgid "Image" |
61 | msgstr "Imagem" | 82 | msgstr "Imagem" |
62 | 83 | ||
63 | -#: courses/forms.py:34 courses/models.py:12 courses/models.py:31 | ||
64 | -msgid "Category" | ||
65 | -msgstr "Categoria" | 84 | +#: courses/forms.py:65 courses/forms.py:105 |
85 | +#: courses/templates/course/replicate.html:115 | ||
86 | +#, fuzzy | ||
87 | +#| msgid "Create Category" | ||
88 | +msgid "CourseCategory" | ||
89 | +msgstr "Criar Categoria" | ||
66 | 90 | ||
67 | -#: courses/forms.py:37 | 91 | +#: courses/forms.py:68 courses/forms.py:109 |
92 | +#: courses/templates/course/replicate.html:23 | ||
68 | msgid "Course name" | 93 | msgid "Course name" |
69 | msgstr "Nome do Curso" | 94 | msgstr "Nome do Curso" |
70 | 95 | ||
71 | -#: courses/forms.py:38 | 96 | +#: courses/forms.py:69 courses/forms.py:110 |
97 | +#: courses/templates/course/replicate.html:32 | ||
72 | msgid "Course objective" | 98 | msgid "Course objective" |
73 | msgstr "Objetivo do Curso" | 99 | msgstr "Objetivo do Curso" |
74 | 100 | ||
75 | -#: courses/forms.py:39 | 101 | +#: courses/forms.py:70 courses/forms.py:111 |
102 | +#: courses/templates/course/replicate.html:42 | ||
76 | msgid "Course modules" | 103 | msgid "Course modules" |
77 | msgstr "Ḿódulos do curso" | 104 | msgstr "Ḿódulos do curso" |
78 | 105 | ||
79 | -#: courses/forms.py:40 | 106 | +#: courses/forms.py:71 courses/forms.py:112 |
107 | +#: courses/templates/course/replicate.html:52 | ||
80 | msgid "Max number of students that a class can have" | 108 | msgid "Max number of students that a class can have" |
81 | msgstr "Número máximo de estudantes que uma classe pode ter" | 109 | msgstr "Número máximo de estudantes que uma classe pode ter" |
82 | 110 | ||
83 | -#: courses/forms.py:41 | 111 | +#: courses/forms.py:72 courses/forms.py:113 |
112 | +#: courses/templates/course/replicate.html:62 | ||
84 | msgid "Date that starts the registration period of the course (dd/mm/yyyy)" | 113 | msgid "Date that starts the registration period of the course (dd/mm/yyyy)" |
85 | msgstr "Data do começo do período de inscrição do curso (dia/mês/ano)" | 114 | msgstr "Data do começo do período de inscrição do curso (dia/mês/ano)" |
86 | 115 | ||
87 | -#: courses/forms.py:42 | 116 | +#: courses/forms.py:73 courses/forms.py:114 |
117 | +#: courses/templates/course/replicate.html:72 | ||
88 | msgid "Date that ends the registration period of the course (dd/mm/yyyy)" | 118 | msgid "Date that ends the registration period of the course (dd/mm/yyyy)" |
89 | msgstr "Data do termino do período de inscrição do curso (dia/mês/ano)" | 119 | msgstr "Data do termino do período de inscrição do curso (dia/mês/ano)" |
90 | 120 | ||
91 | -#: courses/forms.py:43 | 121 | +#: courses/forms.py:74 courses/forms.py:115 |
122 | +#: courses/templates/course/replicate.html:82 | ||
92 | msgid "Date that the course starts (dd/mm/yyyy)" | 123 | msgid "Date that the course starts (dd/mm/yyyy)" |
93 | msgstr "Data que o curso começa (dia/mês/ano)" | 124 | msgstr "Data que o curso começa (dia/mês/ano)" |
94 | 125 | ||
95 | -#: courses/forms.py:44 | 126 | +#: courses/forms.py:75 courses/forms.py:116 |
127 | +#: courses/templates/course/replicate.html:92 | ||
96 | msgid "Date that the course ends (dd/mm/yyyy)" | 128 | msgid "Date that the course ends (dd/mm/yyyy)" |
97 | msgstr "Data que o curso termina (dia/mês/ano)" | 129 | msgstr "Data que o curso termina (dia/mês/ano)" |
98 | 130 | ||
99 | -#: courses/forms.py:45 | 131 | +#: courses/forms.py:76 courses/forms.py:117 |
132 | +#: courses/templates/course/replicate.html:110 | ||
100 | msgid "Representative image of the course" | 133 | msgid "Representative image of the course" |
101 | msgstr "Imagem representativa do curso" | 134 | msgstr "Imagem representativa do curso" |
102 | 135 | ||
103 | -#: courses/forms.py:46 | ||
104 | -msgid "Category which the course belongs" | 136 | +#: courses/forms.py:77 courses/forms.py:118 |
137 | +#: courses/templates/course/replicate.html:124 | ||
138 | +#, fuzzy | ||
139 | +#| msgid "Category which the course belongs" | ||
140 | +msgid "CourseCategory which the course belongs" | ||
105 | msgstr "Categoria ao qual o curso pertence" | 141 | msgstr "Categoria ao qual o curso pertence" |
106 | 142 | ||
107 | -#: courses/forms.py:59 courses/models.py:46 | 143 | +#: courses/forms.py:106 |
144 | +#, fuzzy | ||
145 | +#| msgid "Maximum Students" | ||
146 | +msgid "Student" | ||
147 | +msgstr "Quantidade máxima de estudantes" | ||
148 | + | ||
149 | +#: courses/forms.py:119 | ||
150 | +#, fuzzy | ||
151 | +#| msgid "Course modules" | ||
152 | +msgid "Course's Students" | ||
153 | +msgstr "Ḿódulos do curso" | ||
154 | + | ||
155 | +#: courses/forms.py:134 courses/forms.py:154 courses/models.py:77 | ||
156 | +#: courses/models.py:105 courses/models.py:167 | ||
157 | +#: courses/templates/course/course_card.html:35 | ||
158 | +#: courses/templates/course/view.html:69 | ||
159 | +#: courses/templates/course/view.html:164 | ||
160 | +#: courses/templates/course/view.html:220 | ||
161 | +#: courses/templates/subject/form_view_teacher.html:121 | ||
162 | +#: courses/templates/subject/index.html:80 | ||
108 | msgid "Description" | 163 | msgid "Description" |
109 | msgstr "Descrição" | 164 | msgstr "Descrição" |
110 | 165 | ||
111 | -#: courses/forms.py:60 | 166 | +#: courses/forms.py:135 |
167 | +#, fuzzy | ||
168 | +#| msgid "Course start date" | ||
169 | +msgid "Start date" | ||
170 | +msgstr "Data de inicio do Curso" | ||
171 | + | ||
172 | +#: courses/forms.py:136 | ||
173 | +#, fuzzy | ||
174 | +#| msgid "Course end date" | ||
175 | +msgid "End date" | ||
176 | +msgstr "Data de termino do curso" | ||
177 | + | ||
178 | +#: courses/forms.py:137 | ||
112 | msgid "Is it visible?" | 179 | msgid "Is it visible?" |
113 | msgstr "Visível?" | 180 | msgstr "Visível?" |
114 | 181 | ||
115 | -#: courses/forms.py:63 | ||
116 | -msgid "Module's name" | ||
117 | -msgstr "nome do módulo" | 182 | +#: courses/forms.py:140 |
183 | +#, fuzzy | ||
184 | +#| msgid "Module's name" | ||
185 | +msgid "Subjects's name" | ||
186 | +msgstr "Nome do módulo" | ||
118 | 187 | ||
119 | -#: courses/forms.py:64 | ||
120 | -msgid "Modules's description" | ||
121 | -msgstr "descrição do módulo" | 188 | +#: courses/forms.py:141 |
189 | +#, fuzzy | ||
190 | +#| msgid "Modules's description" | ||
191 | +msgid "Subjects's description" | ||
192 | +msgstr "Descrição do módulo" | ||
122 | 193 | ||
123 | -#: courses/forms.py:65 | ||
124 | -msgid "Is the module visible?" | ||
125 | -msgstr "" | 194 | +#: courses/forms.py:142 |
195 | +msgid "Start date of the subject" | ||
196 | +msgstr "Data de início do assunto" | ||
126 | 197 | ||
127 | -#: courses/models.py:8 courses/models.py:21 courses/models.py:45 | ||
128 | -#: courses/templates/category/index.html:39 | 198 | +#: courses/forms.py:143 |
199 | +msgid "End date of the subject" | ||
200 | +msgstr "Data final do assunto" | ||
201 | + | ||
202 | +#: courses/forms.py:144 | ||
203 | +#, fuzzy | ||
204 | +#| msgid "Is the module visible?" | ||
205 | +msgid "Is the subject visible?" | ||
206 | +msgstr "O módulo é visível?" | ||
207 | + | ||
208 | +#: courses/forms.py:157 | ||
209 | +#, fuzzy | ||
210 | +#| msgid "Module's name" | ||
211 | +msgid "Topic's name" | ||
212 | +msgstr "nome do módulo" | ||
213 | + | ||
214 | +#: courses/forms.py:158 | ||
215 | +#, fuzzy | ||
216 | +#| msgid "Modules's description" | ||
217 | +msgid "Topic's description" | ||
218 | +msgstr "Descrição do módulo" | ||
219 | + | ||
220 | +#: courses/models.py:15 courses/models.py:27 courses/models.py:40 | ||
221 | +#: courses/models.py:76 courses/models.py:104 courses/models.py:166 | ||
129 | msgid "Slug" | 222 | msgid "Slug" |
130 | msgstr "" | 223 | msgstr "" |
131 | 224 | ||
132 | -#: courses/models.py:9 courses/models.py:25 courses/models.py:48 | 225 | +#: courses/models.py:16 courses/models.py:28 courses/models.py:44 |
226 | +#: courses/models.py:81 courses/models.py:106 | ||
133 | msgid "Creation Date" | 227 | msgid "Creation Date" |
134 | -msgstr "" | 228 | +msgstr "Data de criação" |
135 | 229 | ||
136 | -#: courses/models.py:13 courses/templates/category/create.html:16 | ||
137 | -#: courses/templates/category/delete.html:15 | ||
138 | -#: courses/templates/category/index.html:15 | ||
139 | -#: courses/templates/category/update.html:16 | ||
140 | -#: courses/templates/category/view.html:15 | 230 | +#: courses/models.py:19 courses/models.py:31 courses/models.py:50 |
231 | +#: courses/models.py:84 courses/templates/category/create.html:43 | ||
232 | +#: courses/templates/category/index.html:44 | ||
233 | +#: courses/templates/category/update.html:43 | ||
234 | +#: courses/templates/course/index.html:48 | ||
235 | +msgid "Category" | ||
236 | +msgstr "Categoria" | ||
237 | + | ||
238 | +#: courses/models.py:20 courses/models.py:32 | ||
141 | msgid "Categories" | 239 | msgid "Categories" |
142 | msgstr "Categorias" | 240 | msgstr "Categorias" |
143 | 241 | ||
144 | -#: courses/models.py:22 | 242 | +#: courses/models.py:41 |
145 | msgid "Objectivies" | 243 | msgid "Objectivies" |
146 | -msgstr "" | 244 | +msgstr "Objetivos" |
147 | 245 | ||
148 | -#: courses/models.py:24 | 246 | +#: courses/models.py:43 |
149 | msgid "Maximum Students" | 247 | msgid "Maximum Students" |
150 | msgstr "Quantidade máximo de estudantes" | 248 | msgstr "Quantidade máximo de estudantes" |
151 | 249 | ||
152 | -#: courses/models.py:26 | 250 | +#: courses/models.py:45 |
153 | msgid "Register Date (Begin)" | 251 | msgid "Register Date (Begin)" |
154 | -msgstr "" | 252 | +msgstr "Data de inscrição (Início)" |
155 | 253 | ||
156 | -#: courses/models.py:27 | 254 | +#: courses/models.py:46 |
157 | msgid "Register Date (End)" | 255 | msgid "Register Date (End)" |
158 | -msgstr "" | 256 | +msgstr "Data de inscrição (término)" |
159 | 257 | ||
160 | -#: courses/models.py:28 | 258 | +#: courses/models.py:47 |
161 | msgid "Begin of Course Date" | 259 | msgid "Begin of Course Date" |
162 | -msgstr "" | 260 | +msgstr "Início do curso" |
163 | 261 | ||
164 | -#: courses/models.py:29 | 262 | +#: courses/models.py:48 |
165 | msgid "End of Course Date" | 263 | msgid "End of Course Date" |
166 | -msgstr "" | 264 | +msgstr "Término do curso" |
167 | 265 | ||
168 | -#: courses/models.py:32 | ||
169 | -msgid "User" | ||
170 | -msgstr "" | 266 | +#: courses/models.py:51 courses/models.py:85 |
267 | +msgid "Professors" | ||
268 | +msgstr "Professores" | ||
171 | 269 | ||
172 | -#: courses/models.py:36 courses/models.py:49 | 270 | +#: courses/models.py:52 courses/models.py:86 courses/models.py:127 |
271 | +#: courses/models.py:147 | ||
272 | +#, fuzzy | ||
273 | +#| msgid "Maximum Students" | ||
274 | +msgid "Students" | ||
275 | +msgstr "Quantidade máximo de estudantes" | ||
276 | + | ||
277 | +#: courses/models.py:53 | ||
278 | +msgid "Public" | ||
279 | +msgstr "Público" | ||
280 | + | ||
281 | +#: courses/models.py:57 courses/models.py:83 | ||
173 | msgid "Course" | 282 | msgid "Course" |
174 | msgstr "Curso" | 283 | msgstr "Curso" |
175 | 284 | ||
176 | -#: courses/models.py:37 courses/templates/course/create.html:16 | ||
177 | -#: courses/templates/course/delete.html:15 | ||
178 | -#: courses/templates/course/filtered.html:8 | ||
179 | -#: courses/templates/course/home.html:16 courses/templates/course/index.html:15 | ||
180 | -#: courses/templates/course/update.html:16 | ||
181 | -#: courses/templates/course/view.html:15 | ||
182 | -#: courses/templates/module/create.html:17 | ||
183 | -#: courses/templates/module/delete.html:16 | ||
184 | -#: courses/templates/module/index.html:16 | ||
185 | -#: courses/templates/module/update.html:17 | 285 | +#: courses/models.py:58 courses/templates/course/filtered.html:8 |
286 | +#: courses/templates/course/home.html:16 | ||
186 | msgid "Courses" | 287 | msgid "Courses" |
187 | msgstr "Cursos" | 288 | msgstr "Cursos" |
188 | 289 | ||
189 | -#: courses/models.py:47 courses/templates/module/index.html:107 | 290 | +#: courses/models.py:78 courses/models.py:110 |
190 | msgid "Visible" | 291 | msgid "Visible" |
191 | msgstr "Visível" | 292 | msgstr "Visível" |
192 | 293 | ||
193 | -#: courses/models.py:53 | ||
194 | -msgid "Module" | ||
195 | -msgstr "Modulo" | 294 | +#: courses/models.py:79 |
295 | +#, fuzzy | ||
296 | +#| msgid "Begin of Course Date" | ||
297 | +msgid "Begin of Subject Date" | ||
298 | +msgstr "Início do curso" | ||
299 | + | ||
300 | +#: courses/models.py:80 | ||
301 | +#, fuzzy | ||
302 | +#| msgid "End of Course Date" | ||
303 | +msgid "End of Subject Date" | ||
304 | +msgstr "Término do curso" | ||
305 | + | ||
306 | +#: courses/models.py:82 courses/models.py:107 | ||
307 | +msgid "Date of last update" | ||
308 | +msgstr "Data da última atualização" | ||
309 | + | ||
310 | +#: courses/models.py:90 courses/models.py:108 | ||
311 | +msgid "Subject" | ||
312 | +msgstr "Assunto" | ||
313 | + | ||
314 | +#: courses/models.py:91 | ||
315 | +#, fuzzy | ||
316 | +#| msgid "Objectives" | ||
317 | +msgid "Subjects" | ||
318 | +msgstr "Objetivos" | ||
319 | + | ||
320 | +#: courses/models.py:109 | ||
321 | +msgid "Owner" | ||
322 | +msgstr "Proprietário" | ||
196 | 323 | ||
197 | -#: courses/models.py:54 courses/templates/module/index.html:92 | ||
198 | -msgid "Modules" | ||
199 | -msgstr "Modulos" | 324 | +#: courses/models.py:114 courses/models.py:125 courses/models.py:146 |
325 | +msgid "Topic" | ||
326 | +msgstr "Tópico" | ||
327 | + | ||
328 | +#: courses/models.py:115 | ||
329 | +msgid "Topics" | ||
330 | +msgstr "Tópicos" | ||
331 | + | ||
332 | +#: courses/models.py:126 | ||
333 | +msgid "Deliver Date" | ||
334 | +msgstr "Data de entrega" | ||
335 | + | ||
336 | +#: courses/models.py:128 courses/models.py:148 | ||
337 | +#, fuzzy | ||
338 | +#| msgid "Maximum Students" | ||
339 | +msgid "All Students" | ||
340 | +msgstr "Quantidade máximo de estudantes" | ||
341 | + | ||
342 | +#: courses/models.py:151 courses/models.py:156 | ||
343 | +#: courses/templates/subject/form_view_student.html:35 | ||
344 | +#: courses/templates/subject/form_view_teacher.html:56 | ||
345 | +#: courses/templates/subject/form_view_teacher.html:127 | ||
346 | +msgid "Material" | ||
347 | +msgstr "Material" | ||
348 | + | ||
349 | +#: courses/models.py:171 | ||
350 | +#, fuzzy | ||
351 | +#| msgid "Create Category" | ||
352 | +msgid "subject category" | ||
353 | +msgstr "Criar Categoria" | ||
354 | + | ||
355 | +#: courses/models.py:172 | ||
356 | +#, fuzzy | ||
357 | +#| msgid "Categories" | ||
358 | +msgid "subject categories" | ||
359 | +msgstr "Categorias" | ||
200 | 360 | ||
201 | #: courses/templates/category/create.html:8 | 361 | #: courses/templates/category/create.html:8 |
202 | -#: courses/templates/category/delete.html:7 | ||
203 | -#: courses/templates/category/index.html:7 | ||
204 | -#: courses/templates/category/update.html:8 | ||
205 | -#: courses/templates/category/view.html:7 | 362 | +#: courses/templates/category/index.html:9 |
363 | +#: courses/templates/category/update.html:9 | ||
206 | #: courses/templates/course/create.html:8 | 364 | #: courses/templates/course/create.html:8 |
207 | #: courses/templates/course/delete.html:7 courses/templates/course/home.html:8 | 365 | #: courses/templates/course/delete.html:7 courses/templates/course/home.html:8 |
208 | -#: courses/templates/course/index.html:7 courses/templates/course/update.html:8 | ||
209 | -#: courses/templates/course/view.html:7 courses/templates/module/create.html:8 | ||
210 | -#: courses/templates/module/delete.html:7 courses/templates/module/index.html:7 | ||
211 | -#: courses/templates/module/update.html:8 | 366 | +#: courses/templates/course/index.html:20 |
367 | +#: courses/templates/course/replicate.html:8 | ||
368 | +#: courses/templates/course/view.html:28 | ||
369 | +#: courses/templates/subject/index.html:8 | ||
370 | +#: courses/templates/subject/index.html:25 | ||
371 | +#: courses/templates/subject_category/index.html:8 | ||
372 | +#: courses/templates/topic/index.html:8 | ||
212 | msgid "Home" | 373 | msgid "Home" |
213 | msgstr "Inicio" | 374 | msgstr "Inicio" |
214 | 375 | ||
215 | #: courses/templates/category/create.html:9 | 376 | #: courses/templates/category/create.html:9 |
216 | -#: courses/templates/category/delete.html:18 | ||
217 | -#: courses/templates/category/index.html:18 | ||
218 | -#: courses/templates/category/view.html:18 | 377 | +#: courses/templates/category/create.html:36 |
378 | +#: courses/templates/category/create.html:47 | ||
379 | +#: courses/templates/category/index.html:37 | ||
380 | +#: courses/templates/category/index.html:48 | ||
381 | +#: courses/templates/category/update.html:37 | ||
382 | +#: courses/templates/category/update.html:47 | ||
383 | +#: courses/templates/course/index.html:52 | ||
219 | msgid "Create Category" | 384 | msgid "Create Category" |
220 | msgstr "Criar Categoria" | 385 | msgstr "Criar Categoria" |
221 | 386 | ||
222 | -#: courses/templates/category/create.html:26 | ||
223 | -#: courses/templates/category/update.html:26 | ||
224 | -#: courses/templates/course/create.html:26 | ||
225 | -#: courses/templates/course/update.html:32 | ||
226 | -#: courses/templates/module/create.html:52 | ||
227 | -#: courses/templates/module/update.html:52 | ||
228 | -msgid "All fields are required" | ||
229 | -msgstr "Todos os campos são obrigatótios" | ||
230 | - | ||
231 | -#: courses/templates/category/create.html:51 | ||
232 | -#: courses/templates/category/update.html:51 | ||
233 | -#: courses/templates/course/create.html:51 | ||
234 | -#: courses/templates/course/update.html:57 | ||
235 | -#: courses/templates/module/create.html:77 | ||
236 | -#: courses/templates/module/update.html:77 | 387 | +#: courses/templates/category/create.html:16 |
388 | +#: courses/templates/category/index.html:17 | ||
389 | +#: courses/templates/category/update.html:17 | ||
390 | +#: courses/templates/course/index.html:16 | ||
391 | +#: courses/templates/course/view.html:24 | ||
392 | +#: courses/templates/subject/index.html:21 | ||
393 | +#: courses/templates/topic/index.html:24 | ||
394 | +msgid "Menu" | ||
395 | +msgstr "Menu" | ||
396 | + | ||
397 | +#: courses/templates/category/create.html:20 | ||
398 | +#: courses/templates/category/index.html:21 | ||
399 | +#: courses/templates/category/update.html:21 | ||
400 | +#: courses/templates/course/index.html:21 | ||
401 | +#: courses/templates/course/view.html:29 | ||
402 | +#: courses/templates/subject/index.html:26 | ||
403 | +#: courses/templates/topic/index.html:28 | ||
404 | +msgid "Profile" | ||
405 | +msgstr "Perfil" | ||
406 | + | ||
407 | +#: courses/templates/category/create.html:21 | ||
408 | +#: courses/templates/category/index.html:22 | ||
409 | +#: courses/templates/category/update.html:22 | ||
410 | +#: courses/templates/course/view.html:30 courses/templates/topic/index.html:29 | ||
411 | +#, fuzzy | ||
412 | +#| msgid "Courses" | ||
413 | +msgid "My Courses" | ||
414 | +msgstr "Meus Cursos" | ||
415 | + | ||
416 | +#: courses/templates/category/create.html:30 | ||
417 | +#: courses/templates/category/index.html:31 | ||
418 | +#: courses/templates/category/update.html:31 | ||
419 | +#: courses/templates/topic/index.html:37 | ||
420 | +msgid "Actions" | ||
421 | +msgstr "Ações" | ||
422 | + | ||
423 | +#: courses/templates/category/create.html:34 | ||
424 | +#: courses/templates/category/index.html:35 | ||
425 | +#: courses/templates/category/update.html:35 | ||
426 | +#: courses/templates/course/replicate.html:9 courses/views.py:133 | ||
427 | +#, fuzzy | ||
428 | +#| msgid "Duplicate Course" | ||
429 | +msgid "Replicate Course" | ||
430 | +msgstr "Duplicar curso" | ||
431 | + | ||
432 | +#: courses/templates/category/create.html:35 | ||
433 | +#: courses/templates/category/index.html:36 | ||
434 | +#: courses/templates/category/update.html:36 | ||
435 | +#: courses/templates/course/create.html:9 | ||
436 | +#: courses/templates/course/filtered.html:11 courses/views.py:104 | ||
437 | +msgid "Create Course" | ||
438 | +msgstr "Criar curso" | ||
439 | + | ||
440 | +#: courses/templates/category/create.html:48 | ||
441 | +#: courses/templates/category/index.html:49 | ||
442 | +#: courses/templates/category/update.html:48 | ||
443 | +#: courses/templates/course/index.html:53 | ||
444 | +#, fuzzy | ||
445 | +#| msgid "Edit Category" | ||
446 | +msgid "List Category" | ||
447 | +msgstr "Editar categoria" | ||
448 | + | ||
449 | +#: courses/templates/category/create.html:77 | ||
450 | +#: courses/templates/category/update.html:90 | ||
237 | msgid "Save" | 451 | msgid "Save" |
238 | msgstr "Salvar" | 452 | msgstr "Salvar" |
239 | 453 | ||
240 | -#: courses/templates/category/delete.html:8 | ||
241 | -#: courses/templates/category/index.html:8 | ||
242 | -msgid "Manage Categories" | ||
243 | -msgstr "" | 454 | +#: courses/templates/category/delete.html:10 |
455 | +#, fuzzy | ||
456 | +#| msgid "Create Category" | ||
457 | +msgid "Delete Category" | ||
458 | +msgstr "Criar Categoria" | ||
244 | 459 | ||
245 | -#: courses/templates/category/delete.html:26 | ||
246 | -msgid "Are you sure you want to delete the category" | ||
247 | -msgstr "" | 460 | +#: courses/templates/category/delete.html:17 |
461 | +#: courses/templates/subject/delete.html:11 | ||
462 | +#, fuzzy | ||
463 | +#| msgid "Are you sure you want to delete the couse" | ||
464 | +msgid "Are you sure you want to delete the subject" | ||
465 | +msgstr "Você tem certeza que deseja deletar o curso" | ||
248 | 466 | ||
249 | -#: courses/templates/category/delete.html:27 | ||
250 | -#: courses/templates/course/delete.html:28 | ||
251 | -#: courses/templates/module/delete.html:50 | ||
252 | -msgid "Yes" | ||
253 | -msgstr "Sim" | 467 | +#: courses/templates/category/delete.html:23 |
468 | +#: courses/templates/course/course_card.html:57 | ||
469 | +#: courses/templates/subject/form_view_teacher.html:352 | ||
470 | +msgid "Close" | ||
471 | +msgstr "Fechar" | ||
254 | 472 | ||
255 | -#: courses/templates/category/delete.html:28 | ||
256 | -#: courses/templates/course/delete.html:29 | ||
257 | -#: courses/templates/module/delete.html:51 | ||
258 | -msgid "No" | ||
259 | -msgstr "Não" | 473 | +#: courses/templates/category/delete.html:24 |
474 | +#, fuzzy | ||
475 | +#| msgid "Delete Course" | ||
476 | +msgid "Delete" | ||
477 | +msgstr "Deletar curso" | ||
260 | 478 | ||
261 | -#: courses/templates/category/index.html:40 | ||
262 | -msgid "Actions" | ||
263 | -msgstr "" | 479 | +#: courses/templates/category/index.html:10 |
480 | +msgid "Manage Categories" | ||
481 | +msgstr "Gerenciar categorias" | ||
264 | 482 | ||
265 | -#: courses/templates/category/index.html:59 | ||
266 | -msgid "No categories found" | ||
267 | -msgstr "" | 483 | +#: courses/templates/category/index.html:84 |
484 | +#: courses/templates/course/update.html:54 | ||
485 | +#: courses/templates/subject/update.html:20 | ||
486 | +#: courses/templates/topic/update.html:20 | ||
487 | +msgid "Update" | ||
488 | +msgstr "Atualizar" | ||
268 | 489 | ||
269 | -#: courses/templates/category/update.html:9 | ||
270 | -#: courses/templates/category/view.html:21 | 490 | +#: courses/templates/category/index.html:85 |
491 | +#, fuzzy | ||
492 | +#| msgid "Remove Category" | ||
493 | +msgid "Remover" | ||
494 | +msgstr "Remover categoria" | ||
495 | + | ||
496 | +#: courses/templates/category/update.html:10 | ||
271 | msgid "Edit Category" | 497 | msgid "Edit Category" |
272 | -msgstr "" | 498 | +msgstr "Editar categoria" |
273 | 499 | ||
274 | -#: courses/templates/category/view.html:24 | ||
275 | -msgid "Remove Category" | ||
276 | -msgstr "" | 500 | +#: courses/templates/course/course_card.html:22 |
501 | +#: courses/templates/course/view.html:56 | ||
502 | +#: courses/templates/course/view.html:145 | ||
503 | +#: courses/templates/course/view.html:202 | ||
504 | +#: courses/templates/subject/form_view_teacher.html:36 | ||
505 | +#: courses/templates/subject/index.html:68 | ||
506 | +#: courses/templates/topic/index.html:69 | ||
507 | +msgid "Replicate" | ||
508 | +msgstr "Repetir" | ||
509 | + | ||
510 | +#: courses/templates/course/course_card.html:23 | ||
511 | +#, fuzzy | ||
512 | +#| msgid "Are you sure you want to delete the couse" | ||
513 | +msgid "Are you sure you want to delete this course?" | ||
514 | +msgstr "Você tem certeza que deseja deletar o curso" | ||
515 | + | ||
516 | +#: courses/templates/course/course_card.html:23 | ||
517 | +#: courses/templates/course/view.html:58 | ||
518 | +#: courses/templates/course/view.html:146 | ||
519 | +#: courses/templates/course/view.html:203 | ||
520 | +#: courses/templates/subject/form_view_teacher.html:38 | ||
521 | +#: courses/templates/subject/index.html:70 | ||
522 | +#: courses/templates/topic/index.html:71 | ||
523 | +msgid "Remove" | ||
524 | +msgstr "Remover" | ||
525 | + | ||
526 | +#: courses/templates/course/course_card.html:32 | ||
527 | +#: courses/templates/course/view.html:66 | ||
528 | +#, fuzzy | ||
529 | +#| msgid "Course name" | ||
530 | +msgid "Course Name" | ||
531 | +msgstr "Nome do Curso" | ||
277 | 532 | ||
278 | -#: courses/templates/category/view.html:32 | ||
279 | -msgid "Name:" | ||
280 | -msgstr "" | 533 | +#: courses/templates/course/course_card.html:33 |
534 | +#: courses/templates/course/view.html:67 | ||
535 | +msgid "Coordinator" | ||
536 | +msgstr "Coordenador" | ||
537 | + | ||
538 | +#: courses/templates/course/course_card.html:49 | ||
539 | +#, fuzzy | ||
540 | +#| msgid "Duplicate Course" | ||
541 | +msgid "Repicate Course" | ||
542 | +msgstr "Duplicar Curso" | ||
543 | + | ||
544 | +#: courses/templates/course/course_card.html:58 | ||
545 | +#: courses/templates/course/create.html:55 | ||
546 | +#: courses/templates/subject/create.html:20 | ||
547 | +#: courses/templates/subject/form_view_teacher.html:353 | ||
548 | +#: courses/templates/topic/create.html:20 | ||
549 | +#, fuzzy | ||
550 | +#| msgid "Create Course" | ||
551 | +msgid "Create" | ||
552 | +msgstr "Criar curso" | ||
281 | 553 | ||
282 | -#: courses/templates/category/view.html:33 | ||
283 | -msgid "Slug:" | 554 | +#: courses/templates/course/create.html:29 |
555 | +#: courses/templates/course/replicate.html:105 | ||
556 | +#: courses/templates/course/update.html:28 | ||
557 | +msgid "attach_file" | ||
284 | msgstr "" | 558 | msgstr "" |
285 | 559 | ||
286 | -#: courses/templates/course/create.html:9 | 560 | +#: courses/templates/course/delete.html:17 |
561 | +#, fuzzy | ||
562 | +#| msgid "Are you sure you want to delete the couse" | ||
563 | +msgid "Are you sure you want to delete the course" | ||
564 | +msgstr "Você tem certeza que deseja deletar o curso" | ||
565 | + | ||
287 | #: courses/templates/course/delete.html:18 | 566 | #: courses/templates/course/delete.html:18 |
288 | -#: courses/templates/course/filtered.html:11 | ||
289 | -#: courses/templates/course/index.html:18 courses/templates/course/view.html:25 | ||
290 | -#: courses/templates/module/create.html:20 | ||
291 | -#: courses/templates/module/delete.html:19 | ||
292 | -#: courses/templates/module/index.html:26 | ||
293 | -#: courses/templates/module/update.html:20 | ||
294 | -msgid "Create Course" | ||
295 | -msgstr "" | 567 | +#: courses/templates/subject/delete.html:12 |
568 | +msgid "Yes" | ||
569 | +msgstr "Sim" | ||
296 | 570 | ||
297 | -#: courses/templates/course/delete.html:27 | ||
298 | -msgid "Are you sure you want to delete the couse" | ||
299 | -msgstr "" | 571 | +#: courses/templates/course/delete.html:19 |
572 | +#: courses/templates/subject/delete.html:13 | ||
573 | +msgid "No" | ||
574 | +msgstr "Não" | ||
300 | 575 | ||
301 | #: courses/templates/course/filtered.html:19 | 576 | #: courses/templates/course/filtered.html:19 |
302 | -#: courses/templates/course/index.html:26 | ||
303 | msgid "Categories:" | 577 | msgid "Categories:" |
304 | -msgstr "" | 578 | +msgstr "Categorias:" |
305 | 579 | ||
306 | #: courses/templates/course/home.html:9 | 580 | #: courses/templates/course/home.html:9 |
307 | #, fuzzy | 581 | #, fuzzy |
@@ -309,155 +583,398 @@ msgstr "" | @@ -309,155 +583,398 @@ msgstr "" | ||
309 | msgid "Home Course" | 583 | msgid "Home Course" |
310 | msgstr "Curso" | 584 | msgstr "Curso" |
311 | 585 | ||
312 | -#: courses/templates/course/index.html:8 | ||
313 | -msgid "Manage Courses" | ||
314 | -msgstr "" | 586 | +#: courses/templates/course/index.html:23 |
587 | +#: courses/templates/subject/index.html:28 | ||
588 | +#, fuzzy | ||
589 | +#| msgid "Courses" | ||
590 | +msgid "My courses" | ||
591 | +msgstr "Cursos" | ||
315 | 592 | ||
316 | -#: courses/templates/course/index.html:80 | ||
317 | -msgid "students tops" | ||
318 | -msgstr "" | 593 | +#: courses/templates/course/index.html:24 |
594 | +#: courses/templates/course/view.html:31 | ||
595 | +#: courses/templates/subject/index.html:29 | ||
596 | +#, fuzzy | ||
597 | +#| msgid "Courses" | ||
598 | +msgid "All Courses" | ||
599 | +msgstr "Cursos" | ||
319 | 600 | ||
320 | -#: courses/templates/course/index.html:86 | ||
321 | -msgid "Subscribe Period:" | ||
322 | -msgstr "" | 601 | +#: courses/templates/course/index.html:27 |
602 | +#: courses/templates/subject/index.html:32 | ||
603 | +#, fuzzy | ||
604 | +#| msgid "Manage Courses" | ||
605 | +msgid "Manage Users" | ||
606 | +msgstr "Gerenciar cursos" | ||
323 | 607 | ||
324 | -#: courses/templates/course/index.html:88 courses/templates/course/view.html:59 | ||
325 | -#: courses/templates/module/index.html:83 | ||
326 | -msgid "Period:" | ||
327 | -msgstr "" | 608 | +#: courses/templates/course/index.html:31 |
609 | +#: courses/templates/subject/index.html:36 | ||
610 | +msgid "Manage Courses" | ||
611 | +msgstr "Gerenciar cursos" | ||
328 | 612 | ||
329 | #: courses/templates/course/index.html:104 | 613 | #: courses/templates/course/index.html:104 |
330 | msgid "No courses found" | 614 | msgid "No courses found" |
331 | -msgstr "" | 615 | +msgstr "Nenhum curso encontrado" |
332 | 616 | ||
333 | -#: courses/templates/course/update.html:9 courses/templates/course/view.html:28 | ||
334 | -#: courses/templates/module/create.html:26 | ||
335 | -#: courses/templates/module/delete.html:25 | ||
336 | -#: courses/templates/module/index.html:29 | ||
337 | -#: courses/templates/module/update.html:26 | ||
338 | -msgid "Edit Course" | ||
339 | -msgstr "" | 617 | +#: courses/templates/course/replicate.html:97 |
618 | +#, fuzzy | ||
619 | +#| msgid "Image" | ||
620 | +msgid "Imagem" | ||
621 | +msgstr "Imagem" | ||
340 | 622 | ||
341 | -#: courses/templates/course/update.html:19 | ||
342 | -#: courses/templates/course/view.html:21 | ||
343 | -#: courses/templates/module/create.html:29 | ||
344 | -#: courses/templates/module/delete.html:9 | ||
345 | -#: courses/templates/module/delete.html:28 | ||
346 | -#: courses/templates/module/index.html:9 courses/templates/module/index.html:22 | ||
347 | -#: courses/templates/module/update.html:29 | ||
348 | -msgid "Manage Modules" | ||
349 | -msgstr "" | 623 | +#: courses/templates/course/view.html:55 |
624 | +#: courses/templates/course/view.html:243 | ||
625 | +#, fuzzy | ||
626 | +#| msgid "Create Course" | ||
627 | +msgid "Create Subject" | ||
628 | +msgstr "Criar curso" | ||
629 | + | ||
630 | +#: courses/templates/course/view.html:57 | ||
631 | +#: courses/templates/subject/form_view_teacher.html:37 | ||
632 | +#: courses/templates/subject/index.html:69 | ||
633 | +#: courses/templates/topic/index.html:70 | ||
634 | +msgid "Edit" | ||
635 | +msgstr "Editar" | ||
636 | + | ||
637 | +#: courses/templates/course/view.html:83 | ||
638 | +msgid "Create a New Subject" | ||
639 | +msgstr "Criar novo assunto" | ||
640 | + | ||
641 | +#: courses/templates/course/view.html:89 | ||
642 | +#: courses/templates/subject/form_view_teacher.html:173 | ||
643 | +#: courses/templates/subject/form_view_teacher.html:313 | ||
644 | +msgid "Cancel" | ||
645 | +msgstr "Cancelar" | ||
646 | + | ||
647 | +#: courses/templates/course/view.html:90 | ||
648 | +#: courses/templates/course/view.html:117 | ||
649 | +#: courses/templates/course/view.html:260 | ||
650 | +#: courses/templates/subject/form_view_teacher.html:206 | ||
651 | +#: courses/templates/subject/form_view_teacher.html:258 | ||
652 | +msgid "Confirm" | ||
653 | +msgstr "Confirmar" | ||
654 | + | ||
655 | +#: courses/templates/course/view.html:113 | ||
656 | +#: courses/templates/course/view.html:256 | ||
657 | +#, fuzzy | ||
658 | +#| msgid "Are you sure you want to delete the couse" | ||
659 | +msgid "Are you sure you want to remove this subject?" | ||
660 | +msgstr "Você tem certeza que deseja deletar o curso" | ||
350 | 661 | ||
351 | -#: courses/templates/course/update.html:22 | ||
352 | -#: courses/templates/course/view.html:31 | ||
353 | -#: courses/templates/module/create.html:32 | ||
354 | -#: courses/templates/module/delete.html:31 | ||
355 | -#: courses/templates/module/index.html:32 | ||
356 | -#: courses/templates/module/update.html:32 | ||
357 | -msgid "Participants" | ||
358 | -msgstr "" | 662 | +#: courses/templates/course/view.html:154 |
663 | +#: courses/templates/course/view.html:210 | ||
664 | +#, fuzzy | ||
665 | +#| msgid "Are you sure you want to delete the couse" | ||
666 | +msgid "Are you sure you want to subscribe to this subject?" | ||
667 | +msgstr "Você tem certeza que deseja deletar o curso" | ||
359 | 668 | ||
360 | -#: courses/templates/course/view.html:18 | ||
361 | -#: courses/templates/module/create.html:23 | ||
362 | -#: courses/templates/module/delete.html:22 | ||
363 | -#: courses/templates/module/index.html:19 | ||
364 | -#: courses/templates/module/update.html:23 | ||
365 | -msgid "Course Info" | ||
366 | -msgstr "" | 669 | +#: courses/templates/course/view.html:154 |
670 | +#: courses/templates/course/view.html:210 | ||
671 | +#, fuzzy | ||
672 | +#| msgid "Subscribes:" | ||
673 | +msgid "Subscribe" | ||
674 | +msgstr "Inscrições:" | ||
675 | + | ||
676 | +#: courses/templates/course/view.html:161 | ||
677 | +#: courses/templates/course/view.html:217 | ||
678 | +#: courses/templates/subject/index.html:78 | ||
679 | +msgid "Professor" | ||
680 | +msgstr "Professor" | ||
681 | + | ||
682 | +#: courses/templates/course/view.html:171 | ||
683 | +#: courses/templates/course/view.html:227 | ||
684 | +msgid "Begining" | ||
685 | +msgstr "Início" | ||
686 | + | ||
687 | +#: courses/templates/course/view.html:174 | ||
688 | +#: courses/templates/course/view.html:230 | ||
689 | +#: courses/templates/subject/index.html:88 | ||
690 | +msgid "End" | ||
691 | +msgstr "Final" | ||
692 | + | ||
693 | +#: courses/templates/subject/form_view_student.html:45 | ||
694 | +#: courses/templates/subject/form_view_teacher.html:83 | ||
695 | +#: courses/templates/subject/form_view_teacher.html:94 | ||
696 | +#: courses/templates/subject/form_view_teacher.html:153 | ||
697 | +#, fuzzy | ||
698 | +#| msgid "Objectivies" | ||
699 | +msgid "Activities" | ||
700 | +msgstr "Objetivos" | ||
367 | 701 | ||
368 | -#: courses/templates/course/view.html:34 | ||
369 | -#: courses/templates/module/create.html:35 | ||
370 | -#: courses/templates/module/delete.html:34 | ||
371 | -#: courses/templates/module/index.html:35 | ||
372 | -#: courses/templates/module/update.html:35 | ||
373 | -msgid "Course avaliations" | ||
374 | -msgstr "" | 702 | +#: courses/templates/subject/form_view_teacher.html:62 |
703 | +#: courses/templates/subject/form_view_teacher.html:133 | ||
704 | +msgid "Create a Link" | ||
705 | +msgstr "Criar link" | ||
375 | 706 | ||
376 | -#: courses/templates/course/view.html:37 | ||
377 | -#: courses/templates/module/create.html:38 | ||
378 | -#: courses/templates/module/delete.html:37 | ||
379 | -#: courses/templates/module/index.html:38 | ||
380 | -#: courses/templates/module/update.html:38 | ||
381 | -msgid "Duplicate Course" | ||
382 | -msgstr "" | 707 | +#: courses/templates/subject/form_view_teacher.html:65 |
708 | +#: courses/templates/subject/form_view_teacher.html:136 | ||
709 | +#, fuzzy | ||
710 | +#| msgid "Create Module" | ||
711 | +msgid "Create a file" | ||
712 | +msgstr "Criar módulos" | ||
383 | 713 | ||
384 | -#: courses/templates/course/view.html:40 | ||
385 | -#: courses/templates/module/create.html:41 | ||
386 | -#: courses/templates/module/delete.html:40 | ||
387 | -#: courses/templates/module/index.html:41 | ||
388 | -#: courses/templates/module/update.html:41 | ||
389 | -msgid "Delete Course" | ||
390 | -msgstr "" | 714 | +#: courses/templates/subject/form_view_teacher.html:100 |
715 | +#, fuzzy | ||
716 | +#| msgid "Create Course" | ||
717 | +msgid "Create Forum" | ||
718 | +msgstr "Criar curso" | ||
391 | 719 | ||
392 | -#: courses/templates/course/view.html:56 | ||
393 | -msgid "Subscribes:" | ||
394 | -msgstr "" | 720 | +#: courses/templates/subject/form_view_teacher.html:101 |
721 | +#, fuzzy | ||
722 | +#| msgid "Create Module" | ||
723 | +msgid "Create Poll" | ||
724 | +msgstr "Criar módulos" | ||
395 | 725 | ||
396 | -#: courses/templates/course/view.html:66 | ||
397 | -msgid "Objectives:" | ||
398 | -msgstr "" | 726 | +#: courses/templates/subject/form_view_teacher.html:117 |
727 | +msgid "Name Topic" | ||
728 | +msgstr "Nome do tópico" | ||
399 | 729 | ||
400 | -#: courses/templates/course/view.html:69 | ||
401 | -msgid "Work Plan:" | ||
402 | -msgstr "" | 730 | +#: courses/templates/subject/form_view_teacher.html:159 |
731 | +msgid "Anything" | ||
732 | +msgstr "Qualquer coisa" | ||
403 | 733 | ||
404 | -#: courses/templates/module/create.html:10 | ||
405 | -#: courses/templates/module/index.html:70 | ||
406 | -msgid "Create Module" | ||
407 | -msgstr "" | 734 | +#: courses/templates/subject/form_view_teacher.html:174 |
735 | +#: courses/templates/subject/form_view_teacher.html:314 | ||
736 | +msgid "Submit" | ||
737 | +msgstr "Enviar" | ||
408 | 738 | ||
409 | -#: courses/templates/module/delete.html:49 | ||
410 | -msgid "Are you sure you want to delete the module" | ||
411 | -msgstr "" | 739 | +#: courses/templates/subject/form_view_teacher.html:202 |
740 | +#, fuzzy | ||
741 | +#| msgid "Delete Course" | ||
742 | +msgid "Delete your Topic?" | ||
743 | +msgstr "Deletar curso" | ||
412 | 744 | ||
413 | -#: courses/templates/module/index.html:80 | ||
414 | -msgid "students maximum" | 745 | +#: courses/templates/subject/form_view_teacher.html:220 |
746 | +msgid "Material EMBED" | ||
415 | msgstr "" | 747 | msgstr "" |
416 | 748 | ||
417 | -#: courses/templates/module/index.html:109 | ||
418 | -msgid "Invisible" | 749 | +#: courses/templates/subject/form_view_teacher.html:231 |
750 | +msgid "Code" | ||
419 | msgstr "" | 751 | msgstr "" |
420 | 752 | ||
421 | -#: courses/templates/module/index.html:125 | ||
422 | -msgid "No modules found" | ||
423 | -msgstr "" | 753 | +#: courses/templates/subject/form_view_teacher.html:235 |
754 | +#, fuzzy | ||
755 | +#| msgid "Modules's description" | ||
756 | +msgid "Material description" | ||
757 | +msgstr "Descrição do módulo" | ||
424 | 758 | ||
425 | -#: courses/templates/module/update.html:10 | ||
426 | -msgid "Edit Module" | ||
427 | -msgstr "" | 759 | +#: courses/templates/subject/form_view_teacher.html:277 |
760 | +msgid "Proposal Activity" | ||
761 | +msgstr "Atividade proposta" | ||
428 | 762 | ||
429 | -#: courses/views.py:48 | ||
430 | -msgid "Course created successfully!" | ||
431 | -msgstr "" | 763 | +#: courses/templates/subject/form_view_teacher.html:285 |
764 | +#, fuzzy | ||
765 | +#| msgid "Description" | ||
766 | +msgid "Describe" | ||
767 | +msgstr "Descrição" | ||
768 | + | ||
769 | +#: courses/templates/subject/form_view_teacher.html:291 | ||
770 | +msgid "Opening" | ||
771 | +msgstr "Abertura" | ||
772 | + | ||
773 | +#: courses/templates/subject/form_view_teacher.html:297 | ||
774 | +msgid "Ending" | ||
775 | +msgstr "Final" | ||
776 | + | ||
777 | +#: courses/templates/subject/form_view_teacher.html:306 | ||
778 | +msgid "Send Later" | ||
779 | +msgstr "Enviar depois" | ||
780 | + | ||
781 | +#: courses/templates/subject/form_view_teacher.html:344 | ||
782 | +msgid "Forum" | ||
783 | +msgstr "Fórum" | ||
784 | + | ||
785 | +#: courses/templates/subject/index.html:11 | ||
786 | +#, fuzzy | ||
787 | +#| msgid "Manage Courses" | ||
788 | +msgid "Manage Subjects" | ||
789 | +msgstr "Gerenciar cursos" | ||
790 | + | ||
791 | +#: courses/templates/subject/index.html:85 | ||
792 | +msgid "Beginning" | ||
793 | +msgstr "Início" | ||
432 | 794 | ||
433 | -#: courses/views.py:70 | ||
434 | -msgid "Course edited successfully!" | 795 | +#: courses/templates/subject/index.html:105 |
796 | +#, fuzzy | ||
797 | +#| msgid "Create Course" | ||
798 | +msgid "Create Topic" | ||
799 | +msgstr "Criar curso" | ||
800 | + | ||
801 | +#: courses/templates/subject/poll_item_actions.html:9 | ||
802 | +#: courses/templates/subject/poll_item_actions.html:11 | ||
803 | +msgid "poll" | ||
804 | +msgstr "Enquete" | ||
805 | + | ||
806 | +#: courses/templates/subject_category/index.html:34 | ||
807 | +#, fuzzy | ||
808 | +#| msgid "Create Category" | ||
809 | +msgid "Create Subject Category" | ||
810 | +msgstr "Criar Categoria" | ||
811 | + | ||
812 | +#: courses/templates/subject_category/index.html:48 | ||
813 | +msgid "edit" | ||
814 | +msgstr "Editar" | ||
815 | + | ||
816 | +#: courses/templates/subject_category/index.html:54 | ||
817 | +msgid "delete" | ||
818 | +msgstr "Deletar" | ||
819 | + | ||
820 | +#: courses/templates/topic/index.html:12 | ||
821 | +#, fuzzy | ||
822 | +#| msgid "Manage Categories" | ||
823 | +msgid "Manage Topic" | ||
824 | +msgstr "Gerenciar categorias" | ||
825 | + | ||
826 | +#: courses/templates/topic/index.html:41 | ||
827 | +msgid "Participants" | ||
828 | +msgstr "Participantes" | ||
829 | + | ||
830 | +#: courses/templates/topic/index.html:42 | ||
831 | +#, fuzzy | ||
832 | +#| msgid "Duplicate Course" | ||
833 | +msgid "Replicate subject" | ||
834 | +msgstr "Duplicar curso" | ||
835 | + | ||
836 | +#: courses/templates/topic/index.html:43 | ||
837 | +#, fuzzy | ||
838 | +#| msgid "Create Course" | ||
839 | +msgid "Create subject" | ||
840 | +msgstr "Criar curso" | ||
841 | + | ||
842 | +#: courses/templates/topic/index.html:44 | ||
843 | +#, fuzzy | ||
844 | +#| msgid "Edit Course" | ||
845 | +msgid "Edit subject" | ||
846 | +msgstr "Editar curso" | ||
847 | + | ||
848 | +#: courses/templates/topic/index.html:45 | ||
849 | +msgid "Remove subject" | ||
850 | +msgstr "Remover assunto" | ||
851 | + | ||
852 | +#: courses/templates/topic/index.html:112 | ||
853 | +msgid "Atividade.doc" | ||
435 | msgstr "" | 854 | msgstr "" |
436 | 855 | ||
437 | -#: courses/views.py:92 | 856 | +#: courses/templates/topic/index.html:117 |
857 | +msgid "Grade" | ||
858 | +msgstr "Nota" | ||
859 | + | ||
860 | +#: courses/templates/topic/index.html:127 | ||
861 | +msgid "Send" | ||
862 | +msgstr "Enviar" | ||
863 | + | ||
864 | +#: courses/templates/topic/index.html:150 | ||
865 | +#, fuzzy | ||
866 | +#| msgid "No categories found" | ||
867 | +msgid "No activity found" | ||
868 | +msgstr "Nenhuma categoria encontrada" | ||
869 | + | ||
870 | +#: courses/views.py:265 | ||
438 | msgid "Course deleted successfully!" | 871 | msgid "Course deleted successfully!" |
439 | -msgstr "" | 872 | +msgstr "Curso deletado com sucesso!" |
873 | + | ||
874 | +#: courses/views.py:276 | ||
875 | +msgid "Successfully subscribed to the course!" | ||
876 | +msgstr "Inscrição no curso realizada com sucesso!" | ||
877 | + | ||
878 | +#: courses/views.py:278 | ||
879 | +msgid "" | ||
880 | +"An error has occured. Could not subscribe to this course, try again later" | ||
881 | +msgstr "Ocorreu um erro. Não pôde inscrever no curso, tente novamente" | ||
440 | 882 | ||
441 | -#: courses/views.py:142 | 883 | +#: courses/views.py:336 |
442 | msgid "Category created successfully!" | 884 | msgid "Category created successfully!" |
443 | -msgstr "" | 885 | +msgstr "Categoria criada com sucesso!" |
444 | 886 | ||
445 | -#: courses/views.py:164 | ||
446 | -msgid "Category edited successfully!" | ||
447 | -msgstr "" | 887 | +#: courses/views.py:349 |
888 | +#, fuzzy | ||
889 | +#| msgid "Category edited successfully!" | ||
890 | +msgid "Category updated successfully!" | ||
891 | +msgstr "Categoria editada com sucesso!" | ||
448 | 892 | ||
449 | -#: courses/views.py:185 | 893 | +#: courses/views.py:374 |
450 | msgid "Category deleted successfully!" | 894 | msgid "Category deleted successfully!" |
451 | -msgstr "" | 895 | +msgstr "Categoria deletada com sucesso!" |
452 | 896 | ||
453 | -#: courses/views.py:237 | ||
454 | -msgid "Module created successfully!" | ||
455 | -msgstr "" | 897 | +#: courses/views.py:633 |
898 | +msgid "Successfully subscribed to the subject!" | ||
899 | +msgstr "Inscrição no assunto realizada com sucesso!" | ||
456 | 900 | ||
457 | -#: courses/views.py:268 | ||
458 | -msgid "Module edited successfully!" | ||
459 | -msgstr "" | 901 | +#: courses/views.py:635 |
902 | +msgid "" | ||
903 | +"An error has occured. Could not subscribe to this subject, try again later" | ||
904 | +msgstr "Ocorreu um erro. Não pôde inscrever no assunto, tente novamente" | ||
460 | 905 | ||
461 | -#: courses/views.py:291 | ||
462 | -msgid "Module deleted successfully!" | ||
463 | -msgstr "" | 906 | +#: courses/views.py:637 |
907 | +msgid "You're not subscribed in the course yet." | ||
908 | +msgstr "Você não está inscrito no curso ainda." | ||
909 | + | ||
910 | +#~ msgid "User" | ||
911 | +#~ msgstr "Usuário" | ||
912 | + | ||
913 | +#~ msgid "Module" | ||
914 | +#~ msgstr "Modulo" | ||
915 | + | ||
916 | +#~ msgid "Modules" | ||
917 | +#~ msgstr "Modulos" | ||
918 | + | ||
919 | +#~ msgid "All fields are required" | ||
920 | +#~ msgstr "Todos os campos são obrigatótios" | ||
921 | + | ||
922 | +#~ msgid "Are you sure you want to delete the category" | ||
923 | +#~ msgstr "Você tem certeza que deseja deletar a categoria" | ||
924 | + | ||
925 | +#~ msgid "Name:" | ||
926 | +#~ msgstr "Nome:" | ||
927 | + | ||
928 | +#~ msgid "students tops" | ||
929 | +#~ msgstr "Melhores estudantes" | ||
930 | + | ||
931 | +#~ msgid "Subscribe Period:" | ||
932 | +#~ msgstr "Inscrever período:" | ||
933 | + | ||
934 | +#~ msgid "Period:" | ||
935 | +#~ msgstr "Período:" | ||
936 | + | ||
937 | +#~ msgid "Manage Modules" | ||
938 | +#~ msgstr "Gerenciar módulos" | ||
939 | + | ||
940 | +#~ msgid "Course Info" | ||
941 | +#~ msgstr "Informações do curso" | ||
942 | + | ||
943 | +#~ msgid "Course avaliations" | ||
944 | +#~ msgstr "Avaliações do curso" | ||
945 | + | ||
946 | +#~ msgid "Objectives:" | ||
947 | +#~ msgstr "Objetivos:" | ||
948 | + | ||
949 | +#~ msgid "Work Plan:" | ||
950 | +#~ msgstr "Plano de trabalho:" | ||
951 | + | ||
952 | +#~ msgid "Are you sure you want to delete the module" | ||
953 | +#~ msgstr "Você tem certeza que deseja deletar o módulo" | ||
954 | + | ||
955 | +#~ msgid "students maximum" | ||
956 | +#~ msgstr "Capacidade de estudantes" | ||
957 | + | ||
958 | +#~ msgid "Invisible" | ||
959 | +#~ msgstr "Invisível" | ||
960 | + | ||
961 | +#~ msgid "No modules found" | ||
962 | +#~ msgstr "Nenhum módulo encontrado" | ||
963 | + | ||
964 | +#~ msgid "Edit Module" | ||
965 | +#~ msgstr "Editar módulo" | ||
966 | + | ||
967 | +#~ msgid "Course created successfully!" | ||
968 | +#~ msgstr "Curso criado com sucesso!" | ||
969 | + | ||
970 | +#~ msgid "Course edited successfully!" | ||
971 | +#~ msgstr "Curso editado com sucesso!" | ||
972 | + | ||
973 | +#~ msgid "Module created successfully!" | ||
974 | +#~ msgstr "Módulo criado com sucesso!" | ||
975 | + | ||
976 | +#~ msgid "Module edited successfully!" | ||
977 | +#~ msgstr "Módulo editado com sucesso!" | ||
978 | + | ||
979 | +#~ msgid "Module deleted successfully!" | ||
980 | +#~ msgstr "Módulo deletado com sucesso!" |
courses/permissions.py
1 | from rolepermissions.permissions import register_object_checker | 1 | from rolepermissions.permissions import register_object_checker |
2 | -from amadeus.roles import SystemAdmin | 2 | +from amadeus.roles import SystemAdmin, Professor |
3 | + | ||
4 | +@register_object_checker() | ||
5 | +def view_topic(role, user, topic): | ||
6 | + if (role == SystemAdmin): | ||
7 | + return True | ||
8 | + | ||
9 | + if (user in topic.subject.course.professors.all() and user in topic.subject.professors.all()): | ||
10 | + return True | ||
11 | + | ||
12 | + if (user in topic.subject.course.students.all() and user in topic.subject.students.all()): | ||
13 | + return True | ||
14 | + | ||
15 | + return False | ||
3 | 16 | ||
4 | @register_object_checker() | 17 | @register_object_checker() |
5 | def edit_topic(role, user, topic): | 18 | def edit_topic(role, user, topic): |
@@ -12,6 +25,19 @@ def edit_topic(role, user, topic): | @@ -12,6 +25,19 @@ def edit_topic(role, user, topic): | ||
12 | return False | 25 | return False |
13 | 26 | ||
14 | @register_object_checker() | 27 | @register_object_checker() |
28 | +def view_subject(role, user, subject): | ||
29 | + if (role == SystemAdmin): | ||
30 | + return True | ||
31 | + | ||
32 | + if (user in subject.course.professors.all() and user in subject.professors.all()): | ||
33 | + return True | ||
34 | + | ||
35 | + if (user in subject.course.students.all() and user in subject.students.all()): | ||
36 | + return True | ||
37 | + | ||
38 | + return False | ||
39 | + | ||
40 | +@register_object_checker() | ||
15 | def edit_subject(role, user, subject): | 41 | def edit_subject(role, user, subject): |
16 | if (role == SystemAdmin): | 42 | if (role == SystemAdmin): |
17 | return True | 43 | return True |
@@ -32,6 +58,13 @@ def delete_subject(role, user, subject): | @@ -32,6 +58,13 @@ def delete_subject(role, user, subject): | ||
32 | return False | 58 | return False |
33 | 59 | ||
34 | @register_object_checker() | 60 | @register_object_checker() |
61 | +def delete_category(role, user, category): | ||
62 | + if (role == SystemAdmin or role == Professor): | ||
63 | + return True | ||
64 | + | ||
65 | + return False | ||
66 | + | ||
67 | +@register_object_checker() | ||
35 | def update_course(role, user, course): | 68 | def update_course(role, user, course): |
36 | if (role == SystemAdmin): | 69 | if (role == SystemAdmin): |
37 | return True | 70 | return True |
courses/static/js/course.js
1 | +var locale = navigator.language || navigator.userLanguage; | ||
2 | + | ||
3 | +$('.date-picker').datepicker({ | ||
4 | + language: locale, | ||
5 | +}); | ||
6 | + | ||
1 | /* | 7 | /* |
2 | * | 8 | * |
3 | * Function to get a cookie stored on browser | 9 | * Function to get a cookie stored on browser |
@@ -49,13 +55,13 @@ function subscribe(elem, url, id, confirm_message) { | @@ -49,13 +55,13 @@ function subscribe(elem, url, id, confirm_message) { | ||
49 | function delete_course(url, course, message, return_url) { | 55 | function delete_course(url, course, message, return_url) { |
50 | alertify.confirm(message, function(){ | 56 | alertify.confirm(message, function(){ |
51 | var csrftoken = getCookie('csrftoken'); | 57 | var csrftoken = getCookie('csrftoken'); |
52 | - | 58 | + |
53 | $.ajax({ | 59 | $.ajax({ |
54 | method: 'post', | 60 | method: 'post', |
55 | beforeSend: function (request) { | 61 | beforeSend: function (request) { |
56 | request.setRequestHeader('X-CSRFToken', csrftoken); | 62 | request.setRequestHeader('X-CSRFToken', csrftoken); |
57 | }, | 63 | }, |
58 | - url: url, | 64 | + url: url, |
59 | success: function(data) { | 65 | success: function(data) { |
60 | alertify.alert('Remove Course', 'Course removed successfully!', function(){ | 66 | alertify.alert('Remove Course', 'Course removed successfully!', function(){ |
61 | window.location.href = return_url; | 67 | window.location.href = return_url; |
@@ -64,14 +70,14 @@ function delete_course(url, course, message, return_url) { | @@ -64,14 +70,14 @@ function delete_course(url, course, message, return_url) { | ||
64 | }); | 70 | }); |
65 | }); | 71 | }); |
66 | } | 72 | } |
67 | -/* | 73 | +/* |
68 | * | 74 | * |
69 | * Function to load create course's form | 75 | * Function to load create course's form |
70 | * | 76 | * |
71 | */ | 77 | */ |
72 | function replicate_course(url, course) { | 78 | function replicate_course(url, course) { |
73 | $.ajax({ | 79 | $.ajax({ |
74 | - url: url, | 80 | + url: url, |
75 | data: {'form': course}, | 81 | data: {'form': course}, |
76 | success: function(data) { | 82 | success: function(data) { |
77 | $(".course_replicate_form").html(data); | 83 | $(".course_replicate_form").html(data); |
courses/static/js/modal_category.js
@@ -6,6 +6,7 @@ var Submite = { | @@ -6,6 +6,7 @@ var Submite = { | ||
6 | $(id_li_link).remove(); | 6 | $(id_li_link).remove(); |
7 | $("#modal_category").empty(); | 7 | $("#modal_category").empty(); |
8 | $("#accordion").remove(); | 8 | $("#accordion").remove(); |
9 | + $(".modal-backdrop.in").remove(); | ||
9 | alertify.success("Category removed successfully!"); | 10 | alertify.success("Category removed successfully!"); |
10 | }).fail(function(){ | 11 | }).fail(function(){ |
11 | $("#modal_category").empty(); | 12 | $("#modal_category").empty(); |
courses/static/js/topic_editation_presentation.js
1 | -$(".edit_card").on('click', function() { | ||
2 | - $(".presentation").css('display','none'); | ||
3 | - $(".editation").css('display','block'); | ||
4 | -}) | ||
5 | -$(".edit_card_end").on('click', function() { | ||
6 | - $(".editation").css('display','none'); | ||
7 | - $(".presentation").css('display','block'); | ||
8 | -}) | ||
9 | \ No newline at end of file | 1 | \ No newline at end of file |
2 | +function show_editation(id_topic){ | ||
3 | + $("#presentation_"+ id_topic).css('display','none'); | ||
4 | + $("#editation_"+ id_topic).css('display','block'); | ||
5 | +} | ||
6 | + | ||
7 | +function show_presentation(id_topic){ | ||
8 | + $("#editation_"+ id_topic).css('display','none'); | ||
9 | + $("#presentation_"+ id_topic).css('display','block'); | ||
10 | +} | ||
10 | \ No newline at end of file | 11 | \ No newline at end of file |
courses/templates/category/create.html
@@ -27,25 +27,25 @@ | @@ -27,25 +27,25 @@ | ||
27 | 27 | ||
28 | <div class="panel panel-primary navigation"> | 28 | <div class="panel panel-primary navigation"> |
29 | <div class="panel-heading"> | 29 | <div class="panel-heading"> |
30 | - <h3 class="panel-title">Actions</h3> | 30 | + <h3 class="panel-title">{% trans 'Actions' %}</h3> |
31 | </div> | 31 | </div> |
32 | <div class="panel-body"> | 32 | <div class="panel-body"> |
33 | <ul class="nav nav-pills nav-stacked"> | 33 | <ul class="nav nav-pills nav-stacked"> |
34 | - <li><a href="javascript:void(0)">Replicate Course</a></li> | ||
35 | - <li><a href="{% url 'course:create' %}">Create Course</a></li> | ||
36 | - <li><a href="{% url 'course:create_cat' %}">Create Category</a></li> | 34 | + <li><a href="javascript:void(0)">{% trans 'Replicate Course' %}</a></li> |
35 | + <li><a href="{% url 'course:create' %}">{% trans 'Create Course' %}</a></li> | ||
36 | + <li><a href="{% url 'course:create_cat' %}">{% trans 'Create Category' %}</a></li> | ||
37 | </ul> | 37 | </ul> |
38 | </div> | 38 | </div> |
39 | </div> | 39 | </div> |
40 | 40 | ||
41 | <div class="panel panel-primary navigation"> | 41 | <div class="panel panel-primary navigation"> |
42 | <div class="panel-heading"> | 42 | <div class="panel-heading"> |
43 | - <h3 class="panel-title">Category</h3> | 43 | + <h3 class="panel-title">{% trans 'Category' %}</h3> |
44 | </div> | 44 | </div> |
45 | <div class="panel-body"> | 45 | <div class="panel-body"> |
46 | <ul class="nav nav-pills nav-stacked"> | 46 | <ul class="nav nav-pills nav-stacked"> |
47 | - <li><a href="{% url 'course:create_cat' %}">Create Category</a></li> | ||
48 | - <li><a href="{% url 'course:manage_cat' %}">List Category</a></li> | 47 | + <li><a href="{% url 'course:create_cat' %}">{% trans 'Create Category' %}</a></li> |
48 | + <li><a href="{% url 'course:manage_cat' %}">{% trans 'List Category' %}</a></li> | ||
49 | </ul> | 49 | </ul> |
50 | </div> | 50 | </div> |
51 | </div> | 51 | </div> |
courses/templates/category/index.html
@@ -28,25 +28,25 @@ | @@ -28,25 +28,25 @@ | ||
28 | 28 | ||
29 | <div class="panel panel-primary navigation"> | 29 | <div class="panel panel-primary navigation"> |
30 | <div class="panel-heading"> | 30 | <div class="panel-heading"> |
31 | - <h3 class="panel-title">Actions</h3> | 31 | + <h3 class="panel-title">{% trans 'Actions' %}</h3> |
32 | </div> | 32 | </div> |
33 | <div class="panel-body"> | 33 | <div class="panel-body"> |
34 | <ul class="nav nav-pills nav-stacked"> | 34 | <ul class="nav nav-pills nav-stacked"> |
35 | - <li><a href="javascript:void(0)">Replicate Course</a></li> | ||
36 | - <li><a href="{% url 'course:create' %}">Create Course</a></li> | ||
37 | - <li><a href="{% url 'course:create_cat' %}">Create Category</a></li> | 35 | + <li><a href="javascript:void(0)">{% trans 'Replicate Course' %}</a></li> |
36 | + <li><a href="{% url 'course:create' %}">{% trans 'Create Course' %}</a></li> | ||
37 | + <li><a href="{% url 'course:create_cat' %}">{% trans 'Create Category' %}</a></li> | ||
38 | </ul> | 38 | </ul> |
39 | </div> | 39 | </div> |
40 | </div> | 40 | </div> |
41 | 41 | ||
42 | <div class="panel panel-primary navigation"> | 42 | <div class="panel panel-primary navigation"> |
43 | <div class="panel-heading"> | 43 | <div class="panel-heading"> |
44 | - <h3 class="panel-title">Category</h3> | 44 | + <h3 class="panel-title">{% trans 'Category' %}</h3> |
45 | </div> | 45 | </div> |
46 | <div class="panel-body"> | 46 | <div class="panel-body"> |
47 | <ul class="nav nav-pills nav-stacked"> | 47 | <ul class="nav nav-pills nav-stacked"> |
48 | - <li><a href="{% url 'course:create_cat' %}">Create Category</a></li> | ||
49 | - <li><a href="{% url 'course:manage_cat' %}">List Category</a></li> | 48 | + <li><a href="{% url 'course:create_cat' %}">{% trans 'Create Category' %}</a></li> |
49 | + <li><a href="{% url 'course:manage_cat' %}">{% trans 'List Category' %}</a></li> | ||
50 | </ul> | 50 | </ul> |
51 | </div> | 51 | </div> |
52 | </div> | 52 | </div> |
@@ -72,7 +72,7 @@ | @@ -72,7 +72,7 @@ | ||
72 | <div class="panel-heading" role="tab"> | 72 | <div class="panel-heading" role="tab"> |
73 | <div class="row"> | 73 | <div class="row"> |
74 | <div class="col-xs-9 col-md-10 titleTopic"> | 74 | <div class="col-xs-9 col-md-10 titleTopic"> |
75 | - <h4 style="color:white">{{category}}</h4> | 75 | + <h4 style="color:white; margin-left: 20px;">{{category}}</h4> |
76 | </div> | 76 | </div> |
77 | 77 | ||
78 | <div class="col-xs-4 col-md-2" id="divMoreActions"> | 78 | <div class="col-xs-4 col-md-2" id="divMoreActions"> |
courses/templates/category/update.html
@@ -28,24 +28,24 @@ | @@ -28,24 +28,24 @@ | ||
28 | 28 | ||
29 | <div class="panel panel-primary navigation"> | 29 | <div class="panel panel-primary navigation"> |
30 | <div class="panel-heading"> | 30 | <div class="panel-heading"> |
31 | - <h3 class="panel-title">Actions</h3> | 31 | + <h3 class="panel-title">{% trans 'Actions' %}</h3> |
32 | </div> | 32 | </div> |
33 | <div class="panel-body"> | 33 | <div class="panel-body"> |
34 | <ul class="nav nav-pills nav-stacked"> | 34 | <ul class="nav nav-pills nav-stacked"> |
35 | - <li><a href="javascript:void(0)">Replicate Course</a></li> | ||
36 | - <li><a href="{% url 'course:create' %}">Create Course</a></li> | ||
37 | - <li><a href="{% url 'course:create_cat' %}">Create Category</a></li> | 35 | + <li><a href="javascript:void(0)">{% trans 'Replicate Course' %}</a></li> |
36 | + <li><a href="{% url 'course:create' %}">{% trans 'Create Course' %}</a></li> | ||
37 | + <li><a href="{% url 'course:create_cat' %}">{% trans 'Create Category' %}</a></li> | ||
38 | </ul> | 38 | </ul> |
39 | </div> | 39 | </div> |
40 | </div> | 40 | </div> |
41 | <div class="panel panel-primary navigation"> | 41 | <div class="panel panel-primary navigation"> |
42 | <div class="panel-heading"> | 42 | <div class="panel-heading"> |
43 | - <h3 class="panel-title">Category</h3> | 43 | + <h3 class="panel-title">{% trans 'Category' %}</h3> |
44 | </div> | 44 | </div> |
45 | <div class="panel-body"> | 45 | <div class="panel-body"> |
46 | <ul class="nav nav-pills nav-stacked"> | 46 | <ul class="nav nav-pills nav-stacked"> |
47 | - <li><a href="{% url 'course:create_cat' %}">Create Category</a></li> | ||
48 | - <li><a href="{% url 'course:manage_cat' %}">List Category</a></li> | 47 | + <li><a href="{% url 'course:create_cat' %}">{% trans 'Create Category' %}</a></li> |
48 | + <li><a href="{% url 'course:manage_cat' %}">{% trans 'List Category' %}</a></li> | ||
49 | </ul> | 49 | </ul> |
50 | </div> | 50 | </div> |
51 | </div> | 51 | </div> |
courses/templates/course/course_card.html
1 | {% load static i18n permission_tags %} | 1 | {% load static i18n permission_tags %} |
2 | {% load django_bootstrap_breadcrumbs %} | 2 | {% load django_bootstrap_breadcrumbs %} |
3 | - | ||
4 | -<div class="panel-group ui-accordion ui-widget ui-helper-reset ui-sortable" id="accordion-{{course.slug}}" role="tablist" aria-multiselectable="false"> | ||
5 | - <div class="group"> | ||
6 | - <div class="panel panel-info"> | ||
7 | - <div class="panel-heading" role="tab"> | ||
8 | - <div class="row"> | ||
9 | - <div class="col-xs-9 col-md-10 titleTopic"> | ||
10 | - <a role="button" data-toggle="collapse" data-parent="#accordion-{{course.slug}}" href=".collapseOne-{{course.slug}}" aria-expanded="false" aria-controls="collapseOne-{{course.slug}}" class="collapsed"> | ||
11 | - <h4 style="color:white">{{course.name}}</h4> | ||
12 | - </a> | ||
13 | - </div> | ||
14 | - {% if user|has_role:'professor' or user|has_role:'system_admin' %} | ||
15 | - <div class="col-xs-4 col-md-2" id="divMoreActions"> | ||
16 | - <div class="btn-group"> | ||
17 | - <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
18 | - <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i> | ||
19 | - </button> | ||
20 | - <ul class="dropdown-menu" aria-labelledby="moreActions"> | ||
21 | - <li><a href="{% url 'course:replicate_course' course.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i>{% trans 'Replicate' %}</a></li> | ||
22 | - <li><a href="javascript:delete_course('{% url 'course:delete' course.slug %}', '{{ course.slug }}', '{% trans "Are you sure you want to delete this course?" %}', '{% url 'course:manage' %}')"><i class="fa fa-trash fa-fw" aria-hidden="true"></i>{% trans 'Remove' %}</a></li> | ||
23 | - </ul> | ||
24 | - </div> | ||
25 | - </div> | ||
26 | - {% endif %} | ||
27 | - </div> | ||
28 | - </div> | ||
29 | - <div class="panel-collapse collapseOne-{{course.slug}} collapse in" role="tabpanel" aria-labelledby="headingOne" aria-expanded="true" aria-hidden="false" tabindex="0"> | ||
30 | - <div class="panel-body"> | ||
31 | - <p><b>Course Name: </b>{{course.name}}</p> | ||
32 | - <p><b>Coordinator: </b>{{course.professors.all.0}}</p> | ||
33 | - <p> | ||
34 | - <b>Description:</b> | ||
35 | - <i> | ||
36 | - {{course.content}} | ||
37 | - </i> | ||
38 | - </p> | ||
39 | - <a href="{% url 'course:view' course.slug %}" class="btn btn-raised btn-default center-block">{% trans 'View Course' %}<div class="ripple-container"></div></a> | ||
40 | - </div> | ||
41 | - </div> | ||
42 | - </div> | ||
43 | - </div> | 3 | +<div class="group"> |
4 | + <div class="panel panel-info"> | ||
5 | + <div class="panel-heading course"> | ||
6 | + <div class="row"> | ||
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 | + <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 | + </div> | ||
10 | + <div class="col-xs-9 col-md-4 titleTopic"> | ||
11 | + <a role="button" href="{% url 'course:view' course.slug %}"> | ||
12 | + <h4>{{course.name}}</h4> | ||
13 | + </a> | ||
14 | + </div> | ||
15 | + {% if user|has_role:'professor' or user|has_role:'system_admin' %} | ||
16 | + <div class="col-xs-4 col-md-6 divMoreActions" > | ||
17 | + <div class="btn-group"> | ||
18 | + <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
19 | + <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i> | ||
20 | + </button> | ||
21 | + <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> | ||
22 | + <li><a href="{% url 'course:replicate_course' course.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i>{% trans 'Replicate' %}</a></li> | ||
23 | + <li><a href="javascript:delete_course('{% url 'course:delete' course.slug %}', '{{ course.slug }}', '{% trans "Are you sure you want to delete this course?" %}', '{% url 'course:manage' %}')"><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans 'Remove' %}</a></li> | ||
24 | + </ul> | ||
25 | + </div> | ||
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 %} | ||
31 | + {% endif %} | ||
32 | + </div> | ||
33 | + </div> | ||
34 | + <div class="panel-collapse collapseOne-{{course.slug}} collapse in" role="tabpanel" aria-labelledby="headingOne" aria-expanded="true" aria-hidden="false" tabindex="0"> | ||
35 | + <div class="panel-body"> | ||
36 | + <p><b>{% trans 'Course Name' %}: </b>{{course.name}}</p> | ||
37 | + <p><b>{% trans 'Coordinator' %}: </b>{{course.professors.all.0}}</p> | ||
38 | + <p> | ||
39 | + <b>{% trans 'Description' %}:</b> | ||
40 | + <i> | ||
41 | + {{course.content}} | ||
42 | + </i> | ||
43 | + </p> | ||
44 | + </div> | ||
45 | + </div> | ||
46 | + </div> | ||
44 | </div> | 47 | </div> |
45 | 48 | ||
46 | <div class="modal fade" id="replicateCourse" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> | 49 | <div class="modal fade" id="replicateCourse" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> |
courses/templates/course/create.html
@@ -26,7 +26,7 @@ | @@ -26,7 +26,7 @@ | ||
26 | <input type="text" readonly="" class="form-control" placeholder="Choose your photo..."/> | 26 | <input type="text" readonly="" class="form-control" placeholder="Choose your photo..."/> |
27 | <span class="input-group-btn input-group-sm"> | 27 | <span class="input-group-btn input-group-sm"> |
28 | <button type="button" class="btn btn-fab btn-fab-mini"> | 28 | <button type="button" class="btn btn-fab btn-fab-mini"> |
29 | - <i class="material-icons">attach_file</i> | 29 | + <i class="material-icons">{% trans 'attach_file' %}</i> |
30 | </button> | 30 | </button> |
31 | </span> | 31 | </span> |
32 | </div> | 32 | </div> |
courses/templates/course/home.html
courses/templates/course/index.html
@@ -11,9 +11,9 @@ | @@ -11,9 +11,9 @@ | ||
11 | {% endblock %} | 11 | {% endblock %} |
12 | 12 | ||
13 | {% block sidebar %} | 13 | {% block sidebar %} |
14 | - <div class="panel panel-primary navigation"> | 14 | + <div class="panel panel-primary"> |
15 | <div class="panel-heading"> | 15 | <div class="panel-heading"> |
16 | - <h4>Menu</h4> | 16 | + <h4>{% trans 'Menu' %}</h4> |
17 | </div> | 17 | </div> |
18 | <div class="panel-body"> | 18 | <div class="panel-body"> |
19 | <ul class="nav nav-pills nav-stacked"> | 19 | <ul class="nav nav-pills nav-stacked"> |
@@ -21,8 +21,9 @@ | @@ -21,8 +21,9 @@ | ||
21 | <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li> | 21 | <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li> |
22 | {% if user|has_role:'student' or not user.is_staff %} | 22 | {% if user|has_role:'student' or not user.is_staff %} |
23 | <li><a href="{% url 'course:manage' %}">{% trans 'My courses' %}</a></li> | 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 | {% endif %} | 25 | {% endif %} |
26 | + <li><a href="{% url 'core:guest' %}">{% trans 'Courses' %}</a></li> | ||
26 | {% if user|has_role:'system_admin' %} | 27 | {% if user|has_role:'system_admin' %} |
27 | <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li> | 28 | <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li> |
28 | {% endif %} | 29 | {% endif %} |
@@ -42,89 +43,108 @@ | @@ -42,89 +43,108 @@ | ||
42 | </div> | 43 | </div> |
43 | </div> | 44 | </div> |
44 | 45 | ||
45 | - {% if user|has_role:'professor' or user|has_role:'system_admin' %} | 46 | + {% if user|has_role:'professor' or user|has_role:'system_admin' %} |
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> | ||
57 | + </div> | ||
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> | ||
81 | + </div> | ||
46 | 82 | ||
47 | - <div class="panel panel-primary navigation"> | ||
48 | - <div class="panel-heading"> | ||
49 | - <h3 class="panel-title">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' %}">Create Category</a></li> | ||
54 | - <li><a href="{% url 'course:manage_cat' %}">List Category</a></li> | ||
55 | - </ul> | ||
56 | - </div> | ||
57 | - </div> | ||
58 | - {% endif %} | ||
59 | {% endblock %} | 83 | {% endblock %} |
60 | 84 | ||
61 | {% block content %} | 85 | {% block content %} |
62 | - {% if messages %} | ||
63 | - {% for message in messages %} | ||
64 | - <div class="alert alert-success alert-dismissible" role="alert"> | ||
65 | - <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | ||
66 | - <span aria-hidden="true">×</span> | ||
67 | - </button> | ||
68 | - <p>{{ message }}</p> | ||
69 | - </div> | ||
70 | - {% endfor %} | ||
71 | - {% endif %} | 86 | + {% if messages %} |
87 | + {% for message in messages %} | ||
88 | + <div class="alert alert-success alert-dismissible" role="alert"> | ||
89 | + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | ||
90 | + <span aria-hidden="true">×</span> | ||
91 | + </button> | ||
92 | + <p>{{ message }}</p> | ||
93 | + </div> | ||
94 | + {% endfor %} | ||
95 | + {% endif %} | ||
72 | 96 | ||
73 | -<div class="col-md-12"> | ||
74 | - <form id="searchform" action="{% url 'course:manage' %}" method="get" accept-charset="utf-8"> | ||
75 | - <div class="input-group"> | ||
76 | - <div class="form-group is-empty"> | ||
77 | - <input type="search" class="form-control" placeholder="Search Courses" name="q" id="searchbox"></div> | ||
78 | - <span class="input-group-btn input-group-sm"> | ||
79 | - <button type="button" class="btn btn-fab btn-fab-mini"> | ||
80 | - <i class="material-icons">search</i> | ||
81 | - </button> | ||
82 | - </span> | ||
83 | - </div> | ||
84 | - </form> | 97 | +<div class="col-md-12 cards-content"> |
98 | + <form id="searchform" action="{% url 'course:manage' %}" method="get" accept-charset="utf-8"> | ||
99 | + <div class="input-group"> | ||
100 | + <div class="form-group is-empty"> | ||
101 | + <input type="text" class="form-control" placeholder="Search Courses" name="q"></div> | ||
102 | + <span class="input-group-btn input-group-sm"> | ||
103 | + <button type="submit" class="btn btn-fab btn-fab-mini"> | ||
104 | + <i class="fa fa-search" aria-hidden="true"></i> | ||
105 | + </button> | ||
106 | + </span> | ||
107 | + </div> | ||
108 | + </form> | ||
85 | </div> | 109 | </div> |
86 | - | ||
87 | 110 | ||
88 | </fieldset> | 111 | </fieldset> |
89 | - <div class="col-md-12"> | ||
90 | - {% if courses|length > 0 %} | ||
91 | - {% if request.GET.category == 'all' or none or request.GET.category == '' %} | ||
92 | - {% for course in list_courses %} | ||
93 | - {% include "course/course_card.html" %} | ||
94 | - {% endfor %} | ||
95 | - {% else %} | ||
96 | - {% for course in courses_category %} | ||
97 | - {% if course.category.name == request.GET.category %} | ||
98 | - <!-- Put your content here! --> | ||
99 | - {% include "course/course_card.html" %} | ||
100 | - {% endif %} | ||
101 | - {% endfor %} | ||
102 | - {% endif %} | ||
103 | - {% else %} | ||
104 | - {% trans 'No courses found' %} | ||
105 | - {% endif %} | ||
106 | - </div> | ||
107 | - <div class="col-md-12"> | ||
108 | - <nav aria-label="Page navigation"> | ||
109 | - <ul class="pagination"> | ||
110 | - {% if page_obj.has_previous %} | ||
111 | - <li> | ||
112 | - <a href="?page={{ page_obj.previous_page_number }}"><span><<</span></a> | ||
113 | - </li> | ||
114 | - {% endif %} | ||
115 | - {% for page_number in paginator.page_range %} | ||
116 | - <li{% if page_obj.number == page_number %} class="active"{% endif %}> | ||
117 | - <a href="?page={{ page_number }}">{{ page_number }}</a> | ||
118 | - </li> | ||
119 | - {% endfor %} | ||
120 | - {% if page_obj.has_next %} | ||
121 | - <li> | ||
122 | - <a href="?page={{ page_obj.next_page_number }}"><span>>></span></a> | ||
123 | - </li> | ||
124 | - {% endif %} | ||
125 | - </ul> | ||
126 | - </nav> | ||
127 | - </div> | ||
128 | - | ||
129 | - <script type="text/javascript" src="{% static 'js/course.js' %}"></script> | 112 | + <div class="col-md-12 cards-content"> |
113 | + {% if courses|length > 0 %} | ||
114 | + {% if request.GET.category == '' or aparece or request.GET.q == '' %} | ||
115 | + {% for course in list_courses %} | ||
116 | + {% include "course/course_card.html" %} | ||
117 | + {% endfor %} | ||
118 | + {% endif %} | ||
119 | + {% if request.GET.category or request.GET.q %} | ||
120 | + {% for course in courses %} | ||
121 | + {% include "course/course_card.html" %} | ||
122 | + {% endfor %} | ||
123 | + {% endif %} | ||
124 | + {% else %} | ||
125 | + {% trans 'No courses found' %} | ||
126 | + {% endif %} | ||
127 | + </div> | ||
128 | + <div class="col-md-12"> | ||
129 | + <nav aria-label="Page navigation"> | ||
130 | + <ul class="pagination"> | ||
131 | + {% if page_obj.has_previous %} | ||
132 | + <li> | ||
133 | + <a href="?page={{ page_obj.previous_page_number }}"><span><<</span></a> | ||
134 | + </li> | ||
135 | + {% endif %} | ||
136 | + {% for page_number in paginator.page_range %} | ||
137 | + <li{% if page_obj.number == page_number %} class="active"{% endif %}> | ||
138 | + <a href="?page={{ page_number }}">{{ page_number }}</a> | ||
139 | + </li> | ||
140 | + {% endfor %} | ||
141 | + {% if page_obj.has_next %} | ||
142 | + <li> | ||
143 | + <a href="?page={{ page_obj.next_page_number }}"><span>>></span></a> | ||
144 | + </li> | ||
145 | + {% endif %} | ||
146 | + </ul> | ||
147 | + </nav> | ||
148 | + </div> | ||
149 | + <script type="text/javascript" src="{% static 'js/course.js' %}"></script> | ||
130 | {% endblock %} | 150 | {% endblock %} |
courses/templates/course/replicate.html
@@ -15,86 +15,86 @@ | @@ -15,86 +15,86 @@ | ||
15 | <div class="card-body"> | 15 | <div class="card-body"> |
16 | <form method="post" action="" enctype="multipart/form-data">{% csrf_token %} | 16 | <form method="post" action="" enctype="multipart/form-data">{% csrf_token %} |
17 | <div class="form-group is-fileinput"> | 17 | <div class="form-group is-fileinput"> |
18 | - <label for="id_name">Name</label> | 18 | + <label for="id_name">{% trans 'Name' %}</label> |
19 | 19 | ||
20 | 20 | ||
21 | <input class="form-control" id="id_name" maxlength="100" name="name" type="text" required="" value="{{course.name}}"> | 21 | <input class="form-control" id="id_name" maxlength="100" name="name" type="text" required="" value="{{course.name}}"> |
22 | 22 | ||
23 | - <span class="help-block">Course name</span> | 23 | + <span class="help-block">{% trans 'Course name' %}</span> |
24 | 24 | ||
25 | </div> | 25 | </div> |
26 | 26 | ||
27 | <div class="form-group is-fileinput"> | 27 | <div class="form-group is-fileinput"> |
28 | - <label for="id_objectivies">Objectives</label> | 28 | + <label for="id_objectivies">{% trans 'Objectives' %}</label> |
29 | 29 | ||
30 | <textarea class="form-control" cols="80" id="id_objectivies" name="objectivies" rows="5">{{course.objectivies}}</textarea> | 30 | <textarea class="form-control" cols="80" id="id_objectivies" name="objectivies" rows="5">{{course.objectivies}}</textarea> |
31 | 31 | ||
32 | - <span class="help-block">Course objective</span> | 32 | + <span class="help-block">{% trans 'Course objective' %}</span> |
33 | 33 | ||
34 | </div> | 34 | </div> |
35 | 35 | ||
36 | <div class="form-group is-fileinput"> | 36 | <div class="form-group is-fileinput"> |
37 | - <label for="id_content">Content</label> | 37 | + <label for="id_content">{% trans 'Content' %}</label> |
38 | 38 | ||
39 | 39 | ||
40 | <textarea class="form-control" cols="80" id="id_content" name="content" rows="5">{{course.content}}</textarea> | 40 | <textarea class="form-control" cols="80" id="id_content" name="content" rows="5">{{course.content}}</textarea> |
41 | 41 | ||
42 | - <span class="help-block">Course modules</span> | 42 | + <span class="help-block">{% trans 'Course modules' %}</span> |
43 | 43 | ||
44 | </div> | 44 | </div> |
45 | 45 | ||
46 | <div class="form-group is-fileinput"> | 46 | <div class="form-group is-fileinput"> |
47 | - <label for="id_max_students">Number of studets maximum</label> | 47 | + <label for="id_max_students">{% trans 'Number of studets maximum' %}</label> |
48 | 48 | ||
49 | 49 | ||
50 | <input class="form-control" id="id_max_students" min="0" name="max_students" type="number" value="{{course.max_students}}"> | 50 | <input class="form-control" id="id_max_students" min="0" name="max_students" type="number" value="{{course.max_students}}"> |
51 | 51 | ||
52 | - <span class="help-block">Max number of students that a class can have</span> | 52 | + <span class="help-block">{% trans 'Max number of students that a class can have' %}</span> |
53 | 53 | ||
54 | </div> | 54 | </div> |
55 | 55 | ||
56 | <div class="form-group is-fileinput"> | 56 | <div class="form-group is-fileinput"> |
57 | - <label for="id_init_register_date">Course registration start date</label> | 57 | + <label for="id_init_register_date">{% trans 'Course registration start date' %}</label> |
58 | 58 | ||
59 | 59 | ||
60 | <input type="date" class="form-control" name="init_register_date" value="None" min="2016-10-24"> | 60 | <input type="date" class="form-control" name="init_register_date" value="None" min="2016-10-24"> |
61 | 61 | ||
62 | - <span class="help-block">Date that starts the registration period of the course (dd/mm/yyyy)</span> | 62 | + <span class="help-block">{% trans 'Date that starts the registration period of the course (dd/mm/yyyy)' %}</span> |
63 | 63 | ||
64 | </div> | 64 | </div> |
65 | 65 | ||
66 | <div class="form-group is-fileinput"> | 66 | <div class="form-group is-fileinput"> |
67 | - <label for="id_end_register_date">Course registration end date</label> | 67 | + <label for="id_end_register_date">{% trans 'Course registration end date' %}</label> |
68 | 68 | ||
69 | 69 | ||
70 | <input type="date" class="form-control" name="end_register_date" value="None" min="2016-10-24"> | 70 | <input type="date" class="form-control" name="end_register_date" value="None" min="2016-10-24"> |
71 | 71 | ||
72 | - <span class="help-block">Date that ends the registration period of the course (dd/mm/yyyy)</span> | 72 | + <span class="help-block">{% trans 'Date that ends the registration period of the course (dd/mm/yyyy)' %}</span> |
73 | 73 | ||
74 | </div> | 74 | </div> |
75 | 75 | ||
76 | <div class="form-group is-fileinput"> | 76 | <div class="form-group is-fileinput"> |
77 | - <label for="id_init_date">Course start date</label> | 77 | + <label for="id_init_date">{% trans 'Course start date' %}</label> |
78 | 78 | ||
79 | 79 | ||
80 | <input type="date" class="form-control" name="init_date" value="None" min="2016-10-24"> | 80 | <input type="date" class="form-control" name="init_date" value="None" min="2016-10-24"> |
81 | 81 | ||
82 | - <span class="help-block">Date that the course starts (dd/mm/yyyy)</span> | 82 | + <span class="help-block">{% trans 'Date that the course starts (dd/mm/yyyy)' %}</span> |
83 | 83 | ||
84 | </div> | 84 | </div> |
85 | 85 | ||
86 | <div class="form-group is-fileinput"> | 86 | <div class="form-group is-fileinput"> |
87 | - <label for="id_end_date">Course end date</label> | 87 | + <label for="id_end_date">{% trans 'Course end date' %}</label> |
88 | 88 | ||
89 | 89 | ||
90 | <input type="date" class="form-control" name="end_date" value="None" min="2016-10-24"> | 90 | <input type="date" class="form-control" name="end_date" value="None" min="2016-10-24"> |
91 | 91 | ||
92 | - <span class="help-block">Date that the course ends (dd/mm/yyyy)</span> | 92 | + <span class="help-block">{% trans 'Date that the course ends (dd/mm/yyyy)' %}</span> |
93 | 93 | ||
94 | </div> | 94 | </div> |
95 | 95 | ||
96 | <div class="form-group is-fileinput"> | 96 | <div class="form-group is-fileinput"> |
97 | - <label for="id_image">Imagem</label> | 97 | + <label for="id_image">{% trans 'Imagem' %}</label> |
98 | 98 | ||
99 | 99 | ||
100 | <input class="form-control" id="id_image" name="image" type="file"> | 100 | <input class="form-control" id="id_image" name="image" type="file"> |
@@ -102,17 +102,17 @@ | @@ -102,17 +102,17 @@ | ||
102 | <input type="text" readonly="" class="form-control" placeholder="Choose your photo..."> | 102 | <input type="text" readonly="" class="form-control" placeholder="Choose your photo..."> |
103 | <span class="input-group-btn input-group-sm"> | 103 | <span class="input-group-btn input-group-sm"> |
104 | <button type="button" class="btn btn-fab btn-fab-mini"> | 104 | <button type="button" class="btn btn-fab btn-fab-mini"> |
105 | - <i class="material-icons">attach_file</i> | 105 | + <i class="material-icons">{% trans 'attach_file' %}</i> |
106 | </button> | 106 | </button> |
107 | </span> | 107 | </span> |
108 | </div> | 108 | </div> |
109 | 109 | ||
110 | - <span class="help-block">Representative image of the course</span> | 110 | + <span class="help-block">{% trans 'Representative image of the course' %}</span> |
111 | 111 | ||
112 | </div> | 112 | </div> |
113 | 113 | ||
114 | <div class="form-group is-fileinput"> | 114 | <div class="form-group is-fileinput"> |
115 | - <label for="id_category">CourseCategory</label> | 115 | + <label for="id_category">{% trans 'CourseCategory' %}</label> |
116 | 116 | ||
117 | 117 | ||
118 | <select class="form-control" id="id_category" name="category" required=""> | 118 | <select class="form-control" id="id_category" name="category" required=""> |
@@ -121,7 +121,7 @@ | @@ -121,7 +121,7 @@ | ||
121 | {% endfor %} | 121 | {% endfor %} |
122 | </select> | 122 | </select> |
123 | 123 | ||
124 | - <span class="help-block">CourseCategory which the course belongs</span> | 124 | + <span class="help-block">{% trans 'CourseCategory which the course belongs' %}</span> |
125 | 125 | ||
126 | </div> | 126 | </div> |
127 | 127 |
courses/templates/course/update.html
@@ -18,14 +18,14 @@ | @@ -18,14 +18,14 @@ | ||
18 | <div class="form-group {% if form.has_error %} has-error {% endif %} is-fileinput"> | 18 | <div class="form-group {% if form.has_error %} has-error {% endif %} is-fileinput"> |
19 | <label for="{{ field.auto_id }}">{{ field.label }}</label> | 19 | <label for="{{ field.auto_id }}">{{ field.label }}</label> |
20 | {% if field.auto_id == 'id_init_register_date' or field.auto_id == 'id_end_register_date' or field.auto_id == 'id_init_date' or field.auto_id == 'id_end_date'%} | 20 | {% if field.auto_id == 'id_init_register_date' or field.auto_id == 'id_end_register_date' or field.auto_id == 'id_init_date' or field.auto_id == 'id_end_date'%} |
21 | - <input type="date" class="form-control"name="{{field.name}}" value="{% if field.value.year %}{{field.value|date:'Y-m-d'}}{% else %}{{field.value}}{% endif %}" min="{{now|date:'Y-m-d'}}"> | 21 | + <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 | {% elif field.auto_id == 'id_image' %} | 22 | {% elif field.auto_id == 'id_image' %} |
23 | {% render_field field class='form-control' %} | 23 | {% render_field field class='form-control' %} |
24 | <div class="input-group"> | 24 | <div class="input-group"> |
25 | <input type="text" readonly="" class="form-control" placeholder="Choose your photo..."/> | 25 | <input type="text" readonly="" class="form-control" placeholder="Choose your photo..."/> |
26 | <span class="input-group-btn input-group-sm"> | 26 | <span class="input-group-btn input-group-sm"> |
27 | <button type="button" class="btn btn-fab btn-fab-mini"> | 27 | <button type="button" class="btn btn-fab btn-fab-mini"> |
28 | - <i class="material-icons">attach_file</i> | 28 | + <i class="material-icons">{% trans 'attach_file' %}</i> |
29 | </button> | 29 | </button> |
30 | </span> | 30 | </span> |
31 | </div> | 31 | </div> |
courses/templates/course/view.html
@@ -12,16 +12,17 @@ | @@ -12,16 +12,17 @@ | ||
12 | {% endblock %} | 12 | {% endblock %} |
13 | 13 | ||
14 | {% block breadcrumbs %} | 14 | {% block breadcrumbs %} |
15 | - | ||
16 | - {{ block.super }} | ||
17 | - {% breadcrumb 'Course detail' 'course:view' %} | ||
18 | - | 15 | + <ol class="breadcrumb"> |
16 | + <li><a href="{% url 'app:index' %}">{% trans 'Home' %}</a></li> | ||
17 | + <li><a href="{% url 'course:manage' %}">{% trans 'Courses' %}</a></li> | ||
18 | + <li><a href="{% url 'course:view' course.slug %}">{{ course }}</a></li> | ||
19 | + </ol> | ||
19 | {% endblock %} | 20 | {% endblock %} |
20 | 21 | ||
21 | {% block sidebar %} | 22 | {% block sidebar %} |
22 | - <div class="panel panel-primary navigation"> | 23 | + <div class="panel panel-primary"> |
23 | <div class="panel-heading"> | 24 | <div class="panel-heading"> |
24 | - <h5>{% trans 'Menu' %}</h5> | 25 | + <h4>{% trans 'Menu' %}</h4> |
25 | </div> | 26 | </div> |
26 | <div class="panel-body"> | 27 | <div class="panel-body"> |
27 | <ul class="nav nav-pills nav-stacked"> | 28 | <ul class="nav nav-pills nav-stacked"> |
@@ -33,20 +34,32 @@ | @@ -33,20 +34,32 @@ | ||
33 | </div> | 34 | </div> |
34 | </div> | 35 | </div> |
35 | 36 | ||
36 | - | 37 | + <div class="panel panel-primary"> |
38 | + <div class="panel-heading"> | ||
39 | + <h5>{% trans 'Categories' %}</h5> | ||
40 | + </div> | ||
41 | + <div class="panel-body"> | ||
42 | + <ul class="nav nav-pills nav-stacked"> | ||
43 | + <li {% if category is None %}class="active"{% endif %}><a href="{% url 'course:view' course.slug %}">{% trans 'All' %}</a></li> | ||
44 | + {% for cat in categorys_subjects %} | ||
45 | + <li {% if category == cat.slug %}class="active"{% endif %}><a href="{% url 'course:view_filter' course.slug cat.slug %}">{{ cat }}</a></li> | ||
46 | + {% endfor %} | ||
47 | + </ul> | ||
48 | + </div> | ||
49 | + </div> | ||
37 | {% endblock %} | 50 | {% endblock %} |
38 | 51 | ||
39 | {% block content %} | 52 | {% block content %} |
40 | 53 | ||
41 | - <div class="col-md-12"> | 54 | + <div class="col-md-12 cards-content"> |
42 | <div class="panel panel-info"> | 55 | <div class="panel panel-info"> |
43 | - <div class="panel-heading headingOne"> | 56 | + <div class="panel-heading course-detail"> |
44 | <div class="row"> | 57 | <div class="row"> |
45 | - <div class="col-xs-8 col-md-10 titleTopic"> | ||
46 | - <h4>{{course}}</h4> | 58 | + <div class="col-xs-8 col-md-4 .titleTopic-detail"> |
59 | + <h4>{{course.name}}</h4> | ||
47 | </div> | 60 | </div> |
48 | {% if user|has_role:'professor' and user in course.professors or user|has_role:'system_admin' %} | 61 | {% if user|has_role:'professor' and user in course.professors or user|has_role:'system_admin' %} |
49 | - <div class="col-xs-4 col-md-2" id="divMoreActions"> | 62 | + <div class="col-xs-4 col-md-8" id="divMoreActions"> |
50 | <div class="btn-group"> | 63 | <div class="btn-group"> |
51 | <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | 64 | <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
52 | <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i> | 65 | <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i> |
@@ -63,18 +76,18 @@ | @@ -63,18 +76,18 @@ | ||
63 | </div> | 76 | </div> |
64 | </div> | 77 | </div> |
65 | <div class="panel-body"> | 78 | <div class="panel-body"> |
66 | - <p><b>Course Name: </b>{{course.name}}</p> | ||
67 | - <p><b>Coordinator: </b>{{course.professors}}</p> | 79 | + <p><b>{% trans 'Coordinator' %}: </b>{% for professor in course.professors.all %}{% if not forloop.first %},{% endif %} |
80 | + {{professor}}{% if forloop.last %}.{% endif %}{% endfor %}</p> | ||
68 | <p> | 81 | <p> |
69 | - <b>Description:</b> | 82 | + <b>{% trans 'Description' %}:</b> |
70 | <i> | 83 | <i> |
71 | - {{course.description}} | 84 | + {{ course.objectivies }} |
72 | </i> | 85 | </i> |
73 | </p> | 86 | </p> |
74 | 87 | ||
75 | </div> | 88 | </div> |
76 | </div> | 89 | </div> |
77 | - | 90 | + |
78 | <!-- MODAL CREATE SUBJECT --> | 91 | <!-- MODAL CREATE SUBJECT --> |
79 | <div class="modal" tabindex="-1" role="dialog " id="createSubject"> | 92 | <div class="modal" tabindex="-1" role="dialog " id="createSubject"> |
80 | <div class="modal-dialog"> | 93 | <div class="modal-dialog"> |
@@ -121,26 +134,28 @@ | @@ -121,26 +134,28 @@ | ||
121 | </div> | 134 | </div> |
122 | </div> | 135 | </div> |
123 | </div> | 136 | </div> |
124 | -<div> | ||
125 | - {% if request.GET.category == 'all' or none or request.GET.category == '' %} | ||
126 | - {% for subject in subjects %} | ||
127 | - <div class="panel panel-info panel_{{ subject.id }}"> | ||
128 | - <div class="panel-heading headingTwo ui-sortable-handle" role="tab"> | 137 | +<div class="cards-detail"> |
138 | + {% for subject in subjects %} | ||
139 | + <div class="panel panel-default panel_{{ subject.id }}"> | ||
140 | + <div class="panel-heading heading_{{subject.id}} subject ui-sortable-handle"> | ||
129 | <div class="row"> | 141 | <div class="row"> |
130 | - <div class="col-xs-9 col-md-10 titleTopic"> | ||
131 | - <a role="button" data-toggle="collapse" data-parent="#accordion" href=".collapseTwo" aria-expanded="true" aria-controls="collapseTwo"> | ||
132 | - <h4 style="color:white">{{subject.name}}</h4> | 142 | + <div class="col-md-1 moreAccordion" data-toggle="collapse" data-parent="#accordion-{{subject.slug}}" href=".collapseSubject-{{subject.slug}}" aria-expanded="false" aria-controls="collapseSubject-{{subject.slug}}"> |
143 | + <button class="btn btn-default btn-sm caret-square"><i class="fa fa-caret-square-o-down fa-2x" aria-hidden="true"></i></button> | ||
144 | + </div> | ||
145 | + <div class="col-xs-9 col-md-4 titleTopic"> | ||
146 | + <a role="button" href="{% url 'course:view_subject' subject.slug %}"> | ||
147 | + <h4>{{subject.name}}</h4> | ||
133 | </a> | 148 | </a> |
134 | </div> | 149 | </div> |
135 | {% if user|has_role:'professor' and user in subject.professors or user|has_role:'system_admin' %} | 150 | {% if user|has_role:'professor' and user in subject.professors or user|has_role:'system_admin' %} |
136 | - <div class="col-xs-3 col-md-2" id="divMoreActions"> | 151 | + <div class="col-xs-3 col-md-6" id="divMoreActions"> |
137 | <div class="btn-group"> | 152 | <div class="btn-group"> |
138 | <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | 153 | <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
139 | <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i> | 154 | <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i> |
140 | </button> | 155 | </button> |
141 | <ul class="dropdown-menu" aria-labelledby="moreActions"> | 156 | <ul class="dropdown-menu" aria-labelledby="moreActions"> |
142 | - <li><a href="javascript:void(0)" data-toggle="modal" data-target="#myModal3"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i> Replicate</a></li> | ||
143 | - <li><a href="javascript:void(0)" data-toggle="modal" data-target="#removeSubject2"><i class="fa fa-trash fa-fw" aria-hidden="true"></i> Remove</a></li> | 157 | + <li><a href="javascript:void(0)" data-toggle="modal" data-target="#myModal3"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i> {% trans 'Replicate' %}</a></li> |
158 | + <li><a href="javascript:void(0)" data-toggle="modal" data-target="#removeSubject2"><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans 'Remove' %}</a></li> | ||
144 | </ul> | 159 | </ul> |
145 | </div> | 160 | </div> |
146 | </div> | 161 | </div> |
@@ -153,81 +168,32 @@ | @@ -153,81 +168,32 @@ | ||
153 | {% endif %} | 168 | {% endif %} |
154 | </div> | 169 | </div> |
155 | </div> | 170 | </div> |
156 | - <div class="panel-body"> | ||
157 | - <p><b>{% trans "Professor" %}: </b>{% for professor in subject.professors.all %}{% if not forloop.first %},{% endif %} | ||
158 | - {{professor}}{% if forloop.last %}.{% endif %}{% endfor %}</p> | ||
159 | - <p> | ||
160 | - <b>{% trans "Description" %}: </b> | ||
161 | - <i> | ||
162 | - {{subject.description}} | ||
163 | - </i> | ||
164 | - </p> | ||
165 | - <div class="row"> | ||
166 | - <div class="col-xs-6 col-md-6"> | ||
167 | - <p><b>{% trans "Begining" %}: </b>{{subject.init_date}}</p> | ||
168 | - </div> | ||
169 | - <div class="col-xs-6 col-md-6"> | ||
170 | - <p><b>{% trans "End" %}: </b>{{subject.end_date}}</p> | ||
171 | - </div> | 171 | + <div class="panel-collapse collapseSubject-{{subject.slug}} collapse in" aria-labelledby="heading_{{subject.id}}" aria-expanded="true" aria-hidden="false"> |
172 | + <div class="panel-body"> | ||
173 | + <p><b>{% trans "Professor" %}: </b>{% for professor in subject.professors.all %}{% if not forloop.first %},{% endif %} | ||
174 | + {{professor}}{% if forloop.last %}.{% endif %}{% endfor %}</p> | ||
175 | + <p> | ||
176 | + <b>{% trans 'Category' %}: </b><i>{{ subject.category }}</i> | ||
177 | + </p> | ||
178 | + <p> | ||
179 | + <b>{% trans "Description" %}: </b> | ||
180 | + <i> | ||
181 | + {{subject.description}} | ||
182 | + </i> | ||
183 | + </p> | ||
184 | + <div class="row"> | ||
185 | + <div class="col-xs-6 col-md-6"> | ||
186 | + <p><b>{% trans "Begining" %}: </b>{{subject.init_date}}</p> | ||
172 | </div> | 187 | </div> |
173 | - <a href="{% url 'course:view_subject' subject.slug %}" class="btn btn-raised btn-default center-block view_btn" {% if user|show_subject_subscribe:subject %}style="display:none"{% endif %}>{% trans 'View Subject' %}<div class="ripple-container"></div></a> | ||
174 | - </div> | ||
175 | - </div> | ||
176 | - {% endfor %} | ||
177 | - {% else %} | ||
178 | - {% for subject in subjects_category %} | ||
179 | - {% if subject.category.name == request.GET.category %} | ||
180 | - <div class="panel panel-info panel_{{ subject.id }}"> | ||
181 | - <div class="panel-heading headingTwo ui-sortable-handle" role="tab"> | ||
182 | - <div class="row"> | ||
183 | - <div class="col-xs-9 col-md-10 titleTopic"> | ||
184 | - <a role="button" data-toggle="collapse" data-parent="#accordion" href=".collapseTwo" aria-expanded="true" aria-controls="collapseTwo"> | ||
185 | - <h4 style="color:white">{{subject.name}}</h4> | ||
186 | - </a> | 188 | + <div class="col-xs-6 col-md-6"> |
189 | + <p><b>{% trans "End" %}: </b>{{subject.end_date}}</p> | ||
187 | </div> | 190 | </div> |
188 | - {% if user|has_role:'professor' and user in subject.professors or user|has_role:'system_admin' %} | ||
189 | - <div class="col-xs-3 col-md-2" id="divMoreActions"> | ||
190 | - <div class="btn-group"> | ||
191 | - <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
192 | - <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i> | ||
193 | - </button> | ||
194 | - <ul class="dropdown-menu" aria-labelledby="moreActions"> | ||
195 | - <li><a href="javascript:void(0)" data-toggle="modal" data-target="#myModal3"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i> Replicate</a></li> | ||
196 | - <li><a href="javascript:void(0)" data-toggle="modal" data-target="#removeSubject2"><i class="fa fa-trash fa-fw" aria-hidden="true"></i> Remove</a></li> | ||
197 | - </ul> | ||
198 | - </div> | ||
199 | - </div> | ||
200 | - {% endif %} | ||
201 | - {% if user|show_subject_subscribe:subject %} | ||
202 | - <div class="col-xs-3 col-md-2"> | ||
203 | - <a onclick="subscribe($(this), '{% url 'course:subscribe_subject' subject.slug %}', {{ subject.id }}, '{% trans 'Are you sure you want to subscribe to this subject?' %}')" class="btn btn-sm btn-primary btn-raised">{% trans 'Subscribe' %}</a> | ||
204 | - </div> | ||
205 | - {% endif %} | ||
206 | - </div> | 191 | + </div> |
207 | </div> | 192 | </div> |
208 | - <div class="panel-body"> | ||
209 | - <p><b>{% trans "Professor" %}: </b>{% for professor in subject.professors.all %}{% if not forloop.first %},{% endif %} | ||
210 | - {{professor}}{% if forloop.last %}.{% endif %}{% endfor %}</p> | ||
211 | - <p> | ||
212 | - <b>{% trans "Description" %}: </b> | ||
213 | - <i> | ||
214 | - {{subject.description}} | ||
215 | - </i> | ||
216 | - </p> | ||
217 | - <div class="row"> | ||
218 | - <div class="col-xs-6 col-md-6"> | ||
219 | - <p><b>{% trans "Begining" %}: </b>{{subject.init_date}}</p> | ||
220 | - </div> | ||
221 | - <div class="col-xs-6 col-md-6"> | ||
222 | - <p><b>{% trans "End" %}: </b>{{subject.end_date}}</p> | ||
223 | - </div> | ||
224 | - </div> | ||
225 | - <a href="{% url 'course:view_subject' subject.slug %}" class="btn btn-raised btn-default center-block view_btn" {% if user|show_subject_subscribe:subject %}style="display:none"{% endif %}>{% trans 'View Subject' %}<div class="ripple-container"></div></a> | ||
226 | - </div> | 193 | + </div> |
227 | </div> | 194 | </div> |
228 | - {% endif %} | ||
229 | - {% endfor %} | ||
230 | - {% endif %} | 195 | + {% endfor %} |
196 | + | ||
231 | 197 | ||
232 | {% if user|has_role:'professor' and user in course.professors.all or user|has_role:'system_admin' %} | 198 | {% if user|has_role:'professor' and user in course.professors.all or user|has_role:'system_admin' %} |
233 | 199 |
courses/templates/subject/form_view_student.html
1 | -{% load static i18n list_topic_foruns %} | 1 | + {% load static i18n list_topic_foruns permission_tags widget_tweaks professor_access%} |
2 | 2 | ||
3 | -{% block javascript %} | ||
4 | - <script type="text/javascript" src="{% static 'js/forum.js' %}"></script> | ||
5 | -{% endblock %} | ||
6 | 3 | ||
7 | -<div class="panel panel-default"> | ||
8 | - <a href="{% url 'course:view_topic' topic.slug %}"> | ||
9 | - <div class="panel-heading"> | ||
10 | - <div class="row"> | ||
11 | - <div class="col-md-9 col-sm-9"> | ||
12 | - <h3>{{topic}}</h3> | ||
13 | - </div> | ||
14 | - </div> | ||
15 | - </div> | ||
16 | - </a> | ||
17 | - <div class="panel-body"> | ||
18 | - <p>{{topic.description|linebreaks}}</p> | 4 | + {% block javascript %} |
5 | + <script type="text/javascript" src="{% static 'js/forum.js' %}"></script> | ||
6 | + <script src="{% static 'js/file.js' %}"></script> | ||
7 | + <script type="text/javascript" src="{% static 'js/material.js' %}"></script> | ||
8 | + <script type = "text/javascript" src="{% static 'links.js' %}"></script> | ||
9 | + {% endblock %} | ||
10 | +<div class="cards-detail"> | ||
11 | + <div class="panel-group accordion ui-accordion ui-widget ui-helper-reset ui-sortable" role="tablist" aria-multiselectable="false"> | ||
12 | + <div class="group"><div class="panel panel-default"> | ||
13 | + <div class="panel-heading topic ui-sortable-handle" role="tab"> | ||
14 | + <div class="row"> | ||
15 | + <div class="col-md-1 moreAccordion" data-toggle="collapse" data-parent="#accordion-{{topic.slug}}" href=".collapseTopic-{{topic.slug}}" aria-expanded="false" aria-controls="collapseTopic-{{topic.slug}}"> | ||
16 | + <button class="btn btn-default btn-sm caret-square"><i class="fa fa-caret-square-o-down fa-2x" aria-hidden="true"></i></button> | ||
19 | </div> | 17 | </div> |
20 | - | ||
21 | -</div> | ||
22 | - | 18 | + <div class="col-xs-9 col-md-9 titleTopic"> |
19 | + <a href="{% url 'course:view_topic' topic.slug %}" role="button"> | ||
20 | + <h4>{{topic}}</h4> | ||
21 | + </a> | ||
22 | + </div> | ||
23 | + </div> | ||
24 | + </div> | ||
25 | + <div class="panel-collapse collapseTopic-{{topic.slug}} collapse in" role="tabpanel" aria-labelledby="heading_{{topic.id}}" aria-expanded="true" aria-hidden="false"> | ||
26 | + <div class="panel-body"> | ||
27 | + <div class="presentation"> | ||
28 | + <p> | ||
29 | + <i> | ||
30 | + {{topic.description|linebreaks}} | ||
31 | + </i> | ||
32 | + </p> | ||
23 | 33 | ||
24 | -<div class="modal fade" id="forumModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> | ||
25 | - <div class="modal-dialog" role="document"> | ||
26 | - <div class="modal-content"> | ||
27 | - <div class="modal-header"> | ||
28 | - <h4 class="modal-title" id="myModalLabel">{% trans 'Forum' %}</h4> | ||
29 | - </div> | ||
30 | - <div class="modal-body"> | ||
31 | - <section> | ||
32 | - <div class="forum_topics"></div> | ||
33 | - </section> | 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> | ||
34 | </div> | 39 | </div> |
35 | - <div class="modal-footer"> | ||
36 | - <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans 'Close' %}</button> | ||
37 | - <button type="button" class="btn btn-primary btn-raised">{% trans 'Save changes' %}</button> | 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> | ||
38 | </div> | 48 | </div> |
49 | + <ul> | ||
50 | + {% list_topic_poll request topic %} | ||
51 | + {% list_topic_foruns request topic %} | ||
52 | + </ul> | ||
53 | + </div> | ||
39 | </div> | 54 | </div> |
55 | + </div> | ||
56 | + </div> | ||
57 | + </div> | ||
58 | + </div> | ||
59 | + {% professor_subject topic.subject user as professor_links %} | ||
60 | + {% if professor_links %} | ||
61 | + {% include "links/create_link.html" %} | ||
62 | + {% include "links/delete_link.html" %} | ||
63 | + {% endif %} | ||
64 | + | ||
65 | + | ||
66 | + <!-- MODAL LINK EDIT--> | ||
67 | + {% professor_subject topic.subject user as links_update %} | ||
68 | + {% if links_update%} | ||
69 | + {% include "links/update_link.html" %} | ||
70 | + {% endif %} | ||
40 | </div> | 71 | </div> |
41 | -</div> | 72 | + </div> |
42 | \ No newline at end of file | 73 | \ No newline at end of file |
courses/templates/subject/form_view_teacher.html
1 | - {% load static i18n list_topic_foruns permission_tags widget_tweaks professor_access%} | 1 | +{% load static i18n list_topic_foruns permission_tags widget_tweaks professor_access%} |
2 | 2 | ||
3 | - {% block javascript %} | ||
4 | - <script type="text/javascript" src="{% static 'js/forum.js' %}"></script> | ||
5 | - <script src="{% static 'js/file.js' %}"></script> | ||
6 | - <script type="text/javascript" src="{% static 'js/material.js' %}"></script> | ||
7 | - <script type = "text/javascript" src="{% static 'links.js' %}"></script> | ||
8 | - {% endblock %} | ||
9 | - | ||
10 | - <div class="panel-group accordion ui-accordion ui-widget ui-helper-reset ui-sortable" role="tablist" aria-multiselectable="false"> | ||
11 | - <div class="group"><div class="panel panel-default"> | ||
12 | - <div class="panel-heading headingOne ui-sortable-handle" role="tab"> | 3 | +{% block javascript %} |
4 | + <script type="text/javascript" src="{% static 'js/forum.js' %}"></script> | ||
5 | + <script src="{% static 'js/file.js' %}"></script> | ||
6 | + <script type="text/javascript" src="{% static 'js/material.js' %}"></script> | ||
7 | + <script type = "text/javascript" src="{% static 'js/links.js' %}"></script> | ||
8 | +{% endblock %} | ||
9 | +<div class="panel panel-default cards-detail"> | ||
10 | + <div class="panel-heading topic"> | ||
11 | + <div class="row"> | ||
12 | + <div class="col-md-1 moreAccordion" data-toggle="collapse" data-parent="#accordion-{{topic.slug}}" href=".collapseTopic-{{topic.slug}}" aria-expanded="false" aria-controls="collapseTopic-{{topic.slug}}"> | ||
13 | + <button class="btn btn-default btn-sm caret-square"><i class="fa fa-caret-square-o-down fa-2x" aria-hidden="true"></i></button> | ||
14 | + </div> | ||
15 | + <div class="col-xs-9 col-md-9 titleTopic"> | ||
16 | + <a role="button"> | ||
17 | + <h4>{{topic}}</h4> | ||
18 | + </a> | ||
19 | + </div><!--column --> | ||
20 | + <div class="col-xs-3 col-md-2 divMoreActions"> | ||
21 | + <div class="btn-group"> | ||
22 | + <button type="button" class="btn btn-default btn-sm eye" data-toggle="tooltip" data-placement="bottom" title="Visible"> | ||
23 | + <i class="fa fa-eye fa-2x" aria-hidden="true"></i> | ||
24 | + </button> | ||
25 | + </div> | ||
26 | + <div class="btn-group"> | ||
27 | + <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
28 | + <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i> | ||
29 | + </button> | ||
30 | + {% professor_subject topic.subject user as dropdown_topic %} | ||
31 | + {% if dropdown_topic %} | ||
32 | + <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> | ||
33 | + <li><a href="javascript:void(0)" data-toggle="modal" data-target="#myModal4"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i> {% trans "Replicate" %}</a></li> | ||
34 | + <li><a href="javascript:show_editation('{{topic.slug}}')"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i> {% trans "Edit" %}</a></li> | ||
35 | + <li><a href="javascript:void(0)" data-toggle="modal" data-target="#removeTopic"><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans "Remove" %}</a></li> | ||
36 | + </ul> | ||
37 | + {% endif %} | ||
38 | + </div> | ||
39 | + </div><!--column--> | ||
40 | + </div><!--row--> | ||
41 | + </div> | ||
42 | + <div class="panel-collapse collapseTopic-{{topic.slug}} topic_{{ topic.id }} collapse in" role="tabpanel" aria-labelledby="heading_{{topic.id}}" aria-expanded="true" aria-hidden="false"> | ||
43 | + <div class="panel-body"> | ||
44 | + <div class="presentation" id="presentation_{{topic.slug}}"> | ||
45 | + <p> | ||
46 | + <i> | ||
47 | + {{topic.description|linebreaks}} | ||
48 | + </i> | ||
49 | + </p> | ||
13 | <div class="row"> | 50 | <div class="row"> |
14 | - <div class="col-xs-9 col-md-10 titleTopic"> | ||
15 | - <a role="button" data-toggle="collapse" data-parent=".accordion" href=".collapseOne" aria-expanded="false" aria-controls="collapseOne" class="" aria-selected="false" tabindex="-1"> | ||
16 | - {{topic}} | ||
17 | - </a> | ||
18 | - </div> | ||
19 | - <div class="col-xs-3 col-md-2 divMoreActions"> | ||
20 | - <div class="btn-group"> | ||
21 | - <button type="button" class="btn btn-default btn-sm eye" data-toggle="tooltip" data-placement="bottom" title="Visible"> | ||
22 | - <i class="fa fa-eye fa-2x" aria-hidden="true"></i> | ||
23 | - </button> | ||
24 | - </div> | ||
25 | - <div class="btn-group"> | ||
26 | - <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
27 | - <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i> | ||
28 | - </button> | ||
29 | - {% professor_subject topic.subject user as dropdown_topic %} | ||
30 | - {% if dropdown_topic %} | ||
31 | - <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> | ||
32 | - <li><a href="javascript:void(0)" data-toggle="modal" data-target="#myModal4"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i> {% trans "Replicate" %}</a></li> | ||
33 | - <li><a href="javascript:void(0)" class="edit_card"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i> {% trans "Edit" %}</a></li> | ||
34 | - <li><a href="javascript:void(0)" data-toggle="modal" data-target="#removeTopic"><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans "Remove" %}</a></li> | ||
35 | - </ul> | ||
36 | - {% endif %} | 51 | + <div class="col-xs-6 col-md-6"> |
52 | + <div class="resource_inline"> | ||
53 | + <h4>{% trans 'Material' %}</h4> | ||
37 | </div> | 54 | </div> |
38 | - </div> | ||
39 | - </div> | ||
40 | - </div> | ||
41 | - <div class="panel-collapse collapseOne collapse in" role="tabpanel" aria-labelledby="headingOne" aria-expanded="false" aria-hidden="true" tabindex="-1" aria-selected="false"> | ||
42 | - <div class="panel-body"> | ||
43 | - <div class="presentation"> | ||
44 | - <p> | ||
45 | - <i> | ||
46 | - {{topic.description|linebreaks}} | ||
47 | - </i> | ||
48 | - </p> | ||
49 | - <div class="row"> | ||
50 | - <div class="col-xs-6 col-md-6"> | ||
51 | - <div class="resource_inline"> | ||
52 | - <h4>Material</h4> | ||
53 | - </div> | ||
54 | - <div class="resource_inline"> | ||
55 | - <div class="dropdown"> | ||
56 | - <a href="#" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-plus-circle fa-lg" aria-hidden="true"></i></a> | ||
57 | - <ul class="dropdown-menu" aria-labelledby="dLabel"> | ||
58 | - <li><a href=" javascript:get_modal_link('{% url 'course:links:create_link' topic.slug %}', '#createLinksModal','#divModalLink') ">Create a Link<div class="ripple-container"><div class="ripple ripple-on ripple-out" style="left: 54.5312px; top: 22px; background-color: rgb(0, 150, 136); transform: scale(20);"></div></div></a></li> | ||
59 | - <li> | ||
60 | - <a href="javascript:get_modal_file('{% url 'course:file:create_file' topic.slug %}', '#fileModal', '#divModalFile')"> | ||
61 | - {% trans "Create a file" %} | ||
62 | - <div class="ripple-container"> | ||
63 | - <div class="ripple ripple-on ripple-out" style="left: 33.5312px; top: 11px; background-color: rgb(0, 150, 136); transform: scale(20);"> | ||
64 | - </div> | ||
65 | - </div> | ||
66 | - </a> | ||
67 | - </li> | ||
68 | - </ul> | ||
69 | - </div> | ||
70 | - </div> | ||
71 | - <ul id="list-materials"> | ||
72 | - {% list_topic_file request topic %} | ||
73 | - {% list_topic_link request topic%} | ||
74 | - | ||
75 | - </ul> | ||
76 | - </div> | ||
77 | - <div class="col-xs-4 col-md-4"> | ||
78 | - <div class="resource_inline"> | ||
79 | - <h4>Activities</h4> | ||
80 | - </div> | ||
81 | - <div class="resource_inline"> | ||
82 | - <div class="dropdown"> | ||
83 | - <a href="#" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-plus-circle fa-lg" aria-hidden="true"></i></a> | ||
84 | - <ul class="dropdown-menu" aria-labelledby="dLabel"> | ||
85 | - <li><a href="javascript:createForum('{% url 'course:forum:create' %}', '{{ topic.id }}')">{% trans 'Create Forum' %}<div class="ripple-container"><div class="ripple ripple-on ripple-out" style="left: 33.5312px; top: 11px; background-color: rgb(0, 150, 136); transform: scale(20);"></div></div></a></li> | ||
86 | - <li><a href="javascript:modal.get('{% url 'course:poll:create_poll' topic.slug%}','#poll','#modal_poll');">{% trans 'Create Poll' %}</a></li> | ||
87 | - | ||
88 | - </ul> | ||
89 | - </div> | ||
90 | - </div> | ||
91 | - <ul> | ||
92 | - | ||
93 | - <div class="foruns_list"> | ||
94 | - {% list_topic_poll request topic %} | ||
95 | - {% list_topic_foruns request topic %} | ||
96 | - </div> | 55 | + <div class="resource_inline"> |
56 | + <div class="dropdown"> | ||
57 | + <a href="#" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-plus-circle fa-lg" aria-hidden="true"></i></a> | ||
58 | + <ul class="dropdown-menu" aria-labelledby="dLabel"> | ||
59 | + <li><a href="javascript:get_modal_link('{% url 'course:links:create_link' topic.slug %}', '#createLinksModal','#divModalLink') ">{% trans 'Create a Link' %}</a></li> | ||
60 | + <li><a href="javascript:get_modal_file('{% url 'course:file:create_file' topic.slug %}', '#fileModal', '#divModalFile')">{% trans "Create a file" %}</a></li> | ||
97 | </ul> | 61 | </ul> |
98 | </div> | 62 | </div> |
99 | - | ||
100 | </div> | 63 | </div> |
64 | + <ul> | ||
65 | + {% list_topic_file request topic %} | ||
66 | + {% list_topic_link request topic%} | ||
67 | + </ul> | ||
101 | </div> | 68 | </div> |
102 | - <div class="editation" style="display: none"> | ||
103 | - <div class="form-group"> | ||
104 | - <label class="control-label" for="focusedInput2">Name Topic</label> | ||
105 | - <input type="text" class="form-control" value="Topic 1"> | 69 | + <div class="col-xs-4 col-md-4"> |
70 | + <div class="resource_inline"> | ||
71 | + <h4>{% trans 'Activities' %}</h4> | ||
106 | </div> | 72 | </div> |
107 | - <div class="form-group is-empty"> | ||
108 | - <label class="control-label" for="focusedInput2">Description</label> | ||
109 | - <textarea class="form-control" rows="3" id="textArea"></textarea> | ||
110 | - </div> | ||
111 | - <div class="row"> | ||
112 | - <div class=" col-xs-6 col-md-4"> | ||
113 | - <div class="resource_inline"> | ||
114 | - <h4>Material</h4> | ||
115 | - </div> | ||
116 | - <div class="resource_inline"> | ||
117 | - <div class="dropdown"> | ||
118 | - <a href="#" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-plus-circle fa-lg" aria-hidden="true"></i></a> | ||
119 | - <ul class="dropdown-menu" aria-labelledby="dLabel"> | ||
120 | - <li><a href="javascript:get_modal_link('{% url 'course:links:create_link' topic.slug %}', '#createLinksModal','#divModalLink')">Create a Link</a></li> | ||
121 | - <li> | ||
122 | - <a href="#"> | ||
123 | - {% trans "Create a file" %} | ||
124 | - <div class="ripple-container"> | ||
125 | - <div class="ripple ripple-on ripple-out" style="left: 33.5312px; top: 11px; background-color: rgb(0, 150, 136); transform: scale(20);"> | ||
126 | - </div> | ||
127 | - </div> | ||
128 | - </a> | ||
129 | - </li> | ||
130 | - </ul> | ||
131 | - </div> | ||
132 | - </div> | ||
133 | - <ul id="list-materials-edit"> | ||
134 | - {% list_topic_link_edit request topic%} | ||
135 | - {% list_topic_file_edit request topic %} | 73 | + <div class="resource_inline"> |
74 | + <div class="dropdown"> | ||
75 | + <a href="#" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-plus-circle fa-lg" aria-hidden="true"></i></a> | ||
76 | + <ul class="dropdown-menu" aria-labelledby="dLabel"> | ||
77 | + <li><a href="javascript:createForum('{% url 'course:forum:create' %}', '{{ topic.id }}')">{% trans 'Create Forum' %}</a></li> | ||
78 | + <li><a href="javascript:modal.get('{% url 'course:poll:create_poll' topic.slug%}','#poll','#modal_poll');">{% trans 'Create Poll' %}</a></li> | ||
136 | </ul> | 79 | </ul> |
137 | </div> | 80 | </div> |
138 | - <div class="col-xs-4 col-md-offset-1 col-md-4"> | ||
139 | - <div class="resource_inline"> | ||
140 | - <h4>Activities</h4> | ||
141 | - </div> | ||
142 | - <div class="resource_inline"> | ||
143 | - <div class="dropdown"> | ||
144 | - <a href="#" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-plus-circle fa-lg" aria-hidden="true"></i></a> | ||
145 | - <ul class="dropdown-menu" aria-labelledby="dLabel"> | ||
146 | - <li>Qualquer coisa</li> | ||
147 | - </ul> | ||
148 | - </div> | ||
149 | - </div> | ||
150 | - <ul> | ||
151 | - <li class="icon_edit_remove"><i class="fa fa-pencil fa-lg" aria-hidden="true"></i> <i class="fa fa-trash fa-lg" aria-hidden="true"></i></li> | ||
152 | - | ||
153 | - <li class="icon_edit_remove"><i class="fa fa-pencil fa-lg" aria-hidden="true"></i> <i class="fa fa-trash fa-lg" aria-hidden="true"></i></li> | ||
154 | - | 81 | + </div> |
82 | + <ul> | ||
83 | + {% list_topic_poll request topic %} | ||
84 | + {% list_topic_foruns request topic %} | ||
85 | + </ul> | ||
86 | + </div> | ||
87 | + </div> | ||
88 | + </div><!--EndPresentation--> | ||
89 | + <div class="editation topic_{{ topic.id }}" id="editation_{{topic.slug}}"> | ||
90 | + <div class="form-group"> | ||
91 | + <label class="control-label" for="focusedInput2">{% trans 'Name Topic' %}</label> | ||
92 | + <input type="text" class="form-control" value="{{topic}}"> | ||
93 | + </div> | ||
94 | + <div class="form-group"> | ||
95 | + <label class="control-label" for="focusedInput2">{% trans 'Description' %}</label> | ||
96 | + <textarea class="form-control" rows="3" id="textArea">{{topic.description}}</textarea> | ||
97 | + </div> | ||
98 | + <div class="row"> | ||
99 | + <div class=" col-xs-6 col-md-4"> | ||
100 | + <div class="resource_inline"> | ||
101 | + <h4>{% trans 'Material' %}</h4> | ||
102 | + </div> | ||
103 | + <div class="resource_inline"> | ||
104 | + <div class="dropdown"> | ||
105 | + <a href="#" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-plus-circle fa-lg" aria-hidden="true"></i></a> | ||
106 | + <ul class="dropdown-menu" aria-labelledby="dLabel"> | ||
107 | + <li><a href="javascript:get_modal_link('{% url 'course:links:create_link' topic.slug %}', '#createLinksModal','#divModalLink') ">{% trans 'Create a Link' %}</a></li> | ||
108 | + <li><a href="javascript:get_modal_file('{% url 'course:file:create_file' topic.slug %}', '#fileModal', '#divModalFile')">{% trans "Create a file" %}</a></li> | ||
155 | </ul> | 109 | </ul> |
156 | </div> | 110 | </div> |
157 | </div> | 111 | </div> |
158 | - <div class="form-group"> | ||
159 | - <div class="col-md-10"> | ||
160 | - <button type="button" class="btn btn-raised btn-default edit_card_end">Cancel</button> | ||
161 | - <button type="submit" class="btn btn-raised btn-primary edit_card_end">Submit</button> | 112 | + <ul> |
113 | + {% list_topic_file_edit request topic %} | ||
114 | + {% list_topic_link_edit request topic%} | ||
115 | + </ul> | ||
116 | + </div> | ||
117 | + <div class="col-xs-4 col-md-offset-1 col-md-4"> | ||
118 | + <div class="resource_inline"> | ||
119 | + <h4>{% trans 'Activities' %}</h4> | ||
120 | + </div> | ||
121 | + <div class="resource_inline"> | ||
122 | + <div class="dropdown"> | ||
123 | + <a href="#" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-plus-circle fa-lg" aria-hidden="true"></i></a> | ||
124 | + <ul class="dropdown-menu" aria-labelledby="dLabel"> | ||
125 | + <li><a href="javascript:createForum('{% url 'course:forum:create' %}', '{{ topic.id }}')">{% trans 'Create Forum' %}</a></li> | ||
126 | + <li><a href="javascript:modal.get('{% url 'course:poll:create_poll' topic.slug%}','#poll','#modal_poll');">{% trans 'Create Poll' %}</a></li> | ||
127 | + </ul> | ||
162 | </div> | 128 | </div> |
163 | </div> | 129 | </div> |
130 | + <ul> | ||
131 | + {% list_topic_poll request topic %} | ||
132 | + {% list_topic_foruns request topic %} | ||
133 | + </ul> | ||
164 | </div> | 134 | </div> |
165 | </div> | 135 | </div> |
166 | - </div> | ||
167 | - | ||
168 | - </div> | ||
169 | - <!-- MODAL REMOVE TOPIC --> | ||
170 | - <div class="modal" id="removeTopic"> | ||
171 | - <div class="modal-dialog"> | ||
172 | - <div class="modal-content"> | ||
173 | - <div class="modal-header"> | ||
174 | - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">X</button> | ||
175 | - <h4 class="modal-title"></h4> | ||
176 | - </div> | ||
177 | - <div class="modal-body"> | ||
178 | - <p>Delete your Topic?</p> | ||
179 | - </div> | ||
180 | - <div class="modal-footer"> | ||
181 | - | ||
182 | - <a href="" target="_self"><button type="button" class="btn btn-primary">Confirm</button></a> | ||
183 | - | 136 | + <div class="form-group"> |
137 | + <div class="col-md-10"> | ||
138 | + <a href="javascript:show_presentation('{{topic.slug}}')" class="btn btn-raised btn-default">{% trans 'Cancel' %}</a> | ||
139 | + <a href="javascript:show_presentation('{{topic.slug}}')" class="btn btn-raised btn-primary">{% trans 'Submit' %}</a> | ||
184 | </div> | 140 | </div> |
185 | </div> | 141 | </div> |
186 | - </div> | 142 | + </div><!--EndEditation--> |
143 | + | ||
187 | </div> | 144 | </div> |
188 | - <!-- END --> | ||
189 | - {% professor_subject topic.subject user as professor_links %} | ||
190 | - {% if professor_links%} | ||
191 | - {% include "links/create_link.html" %} | ||
192 | - {% include "links/delete_link.html" %} | ||
193 | - {% endif %} | 145 | + </div> |
146 | +</div> | ||
194 | 147 | ||
195 | - <!-- MODAL EMBEED--> | ||
196 | - <div class="modal fade" id="embedModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> | ||
197 | - <div class="modal-dialog" role="document"> | ||
198 | - <div class="modal-content"> | ||
199 | - <div class="modal-header"> | ||
200 | - <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> | ||
201 | - <h4 class="modal-title" id="myModalLabel">Material EMBED</h4> | ||
202 | - </div> | ||
203 | - <div class="modal-body"> | ||
204 | - <div class="form-group is-empty"> | ||
205 | - <label for="inputEmail" class="col-md-2 control-label">Name:</label> | ||
206 | - <div class="col-md-10"> | ||
207 | - <input type="text" class="form-control" id="inputEmail" placeholder="Name"> | ||
208 | - </div> | ||
209 | - </div> | ||
210 | - <form class="form-horizontal"> | ||
211 | - <div class="form-group is-empty"> | ||
212 | - <label for="textArea" class="col-md-2 control-label">Code:</label> | 148 | +<!-- MODALs --> |
213 | 149 | ||
214 | - <div class="col-md-10"> | ||
215 | - <textarea class="form-control" rows="2" id="textArea"></textarea> | ||
216 | - <span class="help-block">Material description</span> | ||
217 | - </div> | ||
218 | - </div> | ||
219 | - <div class="form-group is-empty"> | ||
220 | - <label for="number" class="col-md-2 control-label">Height</label> | ||
221 | - <div class="col-md-4"> | ||
222 | - <input type="number" class="form-control" id="inputNumber" placeholder="Heiht"> | ||
223 | - </div> | ||
224 | - </div> | ||
225 | - <div class="form-group is-empty"> | ||
226 | - <label for="number" class="col-md-2 control-label">Weight</label> | ||
227 | - <div class="col-md-4"> | ||
228 | - <input type="number" class="form-control" id="inputNumber" placeholder="Weight"> | ||
229 | - </div> | ||
230 | - </div> | ||
231 | - </form> | ||
232 | 150 | ||
233 | - </div> | ||
234 | - <div class="modal-footer"> | ||
235 | - <!-- Don't remove that!!! | ||
236 | - <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">Close</button>--> | 151 | +<!-- MODAL REMOVE TOPIC --> |
152 | +<div class="modal" id="removeTopic"> | ||
153 | + <div class="modal-dialog"> | ||
154 | + <div class="modal-content"> | ||
155 | + <div class="modal-header"> | ||
156 | + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">X</button> | ||
157 | + <h4 class="modal-title"></h4> | ||
158 | + </div> | ||
159 | + <div class="modal-body"> | ||
160 | + <p>{% trans 'Delete your Topic?' %}</p> | ||
161 | + </div> | ||
162 | + <div class="modal-footer"> | ||
163 | + | ||
164 | + <a href="" target="_self"><button type="button" class="btn btn-primary">{% trans 'Confirm' %}</button></a> | ||
237 | 165 | ||
238 | - <!-- Put curtom buttons here!!! --> | ||
239 | - <button type="button" class="btn btn-primary btn-raised">Confirm</button> | ||
240 | - </div> | ||
241 | - </div> | ||
242 | </div> | 166 | </div> |
243 | </div> | 167 | </div> |
244 | - <!-- EndModal --> | 168 | + </div> |
169 | +</div> | ||
170 | +<!-- END --> | ||
245 | 171 | ||
246 | - <!-- MODAL ACTIVITIES--> | ||
247 | - <div class="modal fade" id="ActivityModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> | ||
248 | - <div class="modal-dialog" role="document"> | ||
249 | - <div class="modal-content"> | ||
250 | - <div class="modal-header"> | ||
251 | - <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> | ||
252 | - <h4 class="modal-title" id="myModalLabel"></h4> | 172 | +<!-- MODAL EMBEED--> |
173 | +<div class="modal fade" id="embedModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> | ||
174 | + <div class="modal-dialog" role="document"> | ||
175 | + <div class="modal-content"> | ||
176 | + <div class="modal-header"> | ||
177 | + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> | ||
178 | + <h4 class="modal-title" id="myModalLabel">{% trans 'Material EMBED' %}</h4> | ||
179 | + </div> | ||
180 | + <div class="modal-body"> | ||
181 | + <div class="form-group is-empty"> | ||
182 | + <label for="inputEmail" class="col-md-2 control-label">{% trans 'Name' %}:</label> | ||
183 | + <div class="col-md-10"> | ||
184 | + <input type="text" class="form-control" id="inputEmail" placeholder="Name"> | ||
253 | </div> | 185 | </div> |
254 | - <div class="modal-body"> | ||
255 | - <form class="form-horizontal"> | 186 | + </div> |
187 | + <form class="form-horizontal"> | ||
188 | + <div class="form-group is-empty"> | ||
189 | + <label for="textArea" class="col-md-2 control-label">{% trans 'Code' %}:</label> | ||
256 | 190 | ||
257 | - <fieldset> | ||
258 | - <legend>Atividade Proposta</legend> | ||
259 | - <div class="form-group is-empty"> | ||
260 | - <label for="NameIn" class="col-md-2 control-label">Name:</label> | ||
261 | - <div class="col-md-10"> | ||
262 | - <input type="text" id="NameIn" class="form-control"> | ||
263 | - </div> | ||
264 | - </div> | ||
265 | - <div class="form-group is-empty"> | ||
266 | - <label for="DescIn" class="col-md-2 control-label">Describe:</label> | ||
267 | - <div class="col-md-10"> | ||
268 | - <textarea class="form-control" id="DescIn" rows="2"></textarea> | ||
269 | - </div> | ||
270 | - </div> | ||
271 | - <div class="form-group is-empty"> | ||
272 | - <label for="DateIn" class="col-md-2 control-label">Opening: </label> | ||
273 | - <div class="col-md-10"> | ||
274 | - <input type="text" id="DateIn" class="form-control date-picker" requerid=""> | ||
275 | - </div> | ||
276 | - </div> | ||
277 | - <div class="form-group is-empty"> | ||
278 | - <label for="DateIn" class="col-md-2 control-label">Ending: </label> | ||
279 | - <div class="col-md-10"> | ||
280 | - <input type="text" id="DateIn" class="form-control date-picker" requerid=""> | ||
281 | - </div> | 191 | + <div class="col-md-10"> |
192 | + <textarea class="form-control" rows="2" id="textArea"></textarea> | ||
193 | + <span class="help-block">{% trans 'Material description' %}</span> | ||
282 | </div> | 194 | </div> |
283 | - <div class="form-group" style="margin-top: 0;"> | ||
284 | - <div class="col-md-offset-2 col-md-10"> | ||
285 | - <div class="checkbox"> | ||
286 | - <label> | ||
287 | - <input type="checkbox"><span class="checkbox-material"><span class="check"></span></span> Send Later | ||
288 | - </label> | ||
289 | - </div> | ||
290 | - </div> | 195 | + </div> |
196 | + <div class="form-group is-empty"> | ||
197 | + <label for="number" class="col-md-2 control-label">{% trans 'Height' %}</label> | ||
198 | + <div class="col-md-4"> | ||
199 | + <input type="number" class="form-control" id="inputNumber" placeholder="Heiht"> | ||
291 | </div> | 200 | </div> |
292 | - <div class="form-group"> | ||
293 | - <div class="col-md-10 col-md-offset-2"> | ||
294 | - <button type="button" class="btn btn-default">Cancel</button> | ||
295 | - <button type="submit" class="btn btn-primary">Submit</button> | ||
296 | - </div> | 201 | + </div> |
202 | + <div class="form-group is-empty"> | ||
203 | + <label for="number" class="col-md-2 control-label">{% trans 'Weight' %}</label> | ||
204 | + <div class="col-md-4"> | ||
205 | + <input type="number" class="form-control" id="inputNumber" placeholder="Weight"> | ||
297 | </div> | 206 | </div> |
207 | + </div> | ||
208 | + </form> | ||
298 | 209 | ||
210 | + </div> | ||
211 | + <div class="modal-footer"> | ||
212 | + <!-- Don't remove that!!! | ||
213 | + <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">Close</button>--> | ||
299 | 214 | ||
300 | - </fieldset> | ||
301 | - </form> | ||
302 | - </div> | ||
303 | - </div> | 215 | + <!-- Put curtom buttons here!!! --> |
216 | + <button type="button" class="btn btn-primary btn-raised">{% trans 'Confirm' %}</button> | ||
304 | </div> | 217 | </div> |
305 | </div> | 218 | </div> |
306 | - <!--EndModal--> | 219 | + </div> |
220 | +</div> | ||
221 | +<!-- EndModal --> | ||
307 | 222 | ||
223 | +<!-- MODAL ACTIVITIES--> | ||
224 | +<div class="modal fade" id="ActivityModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> | ||
225 | + <div class="modal-dialog" role="document"> | ||
226 | + <div class="modal-content"> | ||
227 | + <div class="modal-header"> | ||
228 | + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> | ||
229 | + <h4 class="modal-title" id="myModalLabel"></h4> | ||
230 | + </div> | ||
231 | + <div class="modal-body"> | ||
232 | + <form class="form-horizontal"> | ||
308 | 233 | ||
234 | + <fieldset> | ||
235 | + <legend>{% trans 'Proposal Activity' %}</legend> | ||
236 | + <div class="form-group is-empty"> | ||
237 | + <label for="NameIn" class="col-md-2 control-label">{% trans 'Name' %}:</label> | ||
238 | + <div class="col-md-10"> | ||
239 | + <input type="text" id="NameIn" class="form-control"> | ||
240 | + </div> | ||
241 | + </div> | ||
242 | + <div class="form-group is-empty"> | ||
243 | + <label for="DescIn" class="col-md-2 control-label">{% trans 'Describe' %}:</label> | ||
244 | + <div class="col-md-10"> | ||
245 | + <textarea class="form-control" id="DescIn" rows="2"></textarea> | ||
246 | + </div> | ||
247 | + </div> | ||
248 | + <div class="form-group is-empty"> | ||
249 | + <label for="DateIn" class="col-md-2 control-label">{% trans 'Opening' %}: </label> | ||
250 | + <div class="col-md-10"> | ||
251 | + <input type="text" id="DateIn" class="form-control date-picker" requerid=""> | ||
252 | + </div> | ||
253 | + </div> | ||
254 | + <div class="form-group is-empty"> | ||
255 | + <label for="DateIn" class="col-md-2 control-label">{% trans 'Ending' %}: </label> | ||
256 | + <div class="col-md-10"> | ||
257 | + <input type="text" id="DateIn" class="form-control date-picker" requerid=""> | ||
258 | + </div> | ||
259 | + </div> | ||
260 | + <div class="form-group" style="margin-top: 0;"> | ||
261 | + <div class="col-md-offset-2 col-md-10"> | ||
262 | + <div class="checkbox"> | ||
263 | + <label> | ||
264 | + <input type="checkbox"><span class="checkbox-material"><span class="check"></span></span> {% trans 'Send Later' %} | ||
265 | + </label> | ||
266 | + </div> | ||
267 | + </div> | ||
268 | + </div> | ||
269 | + <div class="form-group"> | ||
270 | + <div class="col-md-10 col-md-offset-2"> | ||
271 | + <button type="button" class="btn btn-default">{% trans 'Cancel' %}</button> | ||
272 | + <button type="submit" class="btn btn-primary">{% trans 'Submit' %}</button> | ||
273 | + </div> | ||
274 | + </div> | ||
309 | 275 | ||
310 | - <!-- MODAL LINK EDIT--> | ||
311 | - {% professor_subject topic.subject user as links_update %} | ||
312 | - {% if links_update%} | ||
313 | - {% include "links/update_link.html" %} | ||
314 | - {% endif %} | ||
315 | 276 | ||
316 | - <!-- EndModal --> | ||
317 | - </div> | 277 | + </fieldset> |
278 | + </form> | ||
279 | + </div> | ||
318 | </div> | 280 | </div> |
281 | + </div> | ||
282 | +</div> | ||
283 | +<!--EndModal--> | ||
284 | + | ||
285 | +<!-- MODAL LINK EDIT--> | ||
319 | 286 | ||
320 | 287 | ||
321 | - <div class="modal fade" id="createForum" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> | ||
322 | - <div class="modal-dialog" role="document"> | ||
323 | - <div class="modal-content"> | ||
324 | - <div class="modal-header"> | ||
325 | - <h4 class="modal-title" id="myModalLabel">{% trans 'Forum' %}</h4> | ||
326 | - </div> | ||
327 | - <div class="modal-body"> | ||
328 | - <section> | ||
329 | - <div class="forum_form"></div> | ||
330 | - </section> | ||
331 | - </div> | ||
332 | - <div class="modal-footer"> | ||
333 | - <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans 'Close' %}</button> | ||
334 | - <button type="button" onclick="$('#forum_create').submit();" class="btn btn-primary btn-raised">{% trans 'Create' %}</button> | ||
335 | - </div> | 288 | +<!-- EndModal --> |
289 | + | ||
290 | + | ||
291 | +<div class="modal fade" id="createForum" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> | ||
292 | + <div class="modal-dialog" role="document"> | ||
293 | + <div class="modal-content"> | ||
294 | + <div class="modal-header"> | ||
295 | + <h4 class="modal-title" id="myModalLabel">{% trans 'Forum' %}</h4> | ||
296 | + </div> | ||
297 | + <div class="modal-body"> | ||
298 | + <section> | ||
299 | + <div class="forum_form"></div> | ||
300 | + </section> | ||
301 | + </div> | ||
302 | + <div class="modal-footer"> | ||
303 | + <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans 'Close' %}</button> | ||
304 | + <button type="button" onclick="$('#forum_create').submit();" class="btn btn-primary btn-raised">{% trans 'Create' %}</button> | ||
336 | </div> | 305 | </div> |
337 | </div> | 306 | </div> |
338 | </div> | 307 | </div> |
308 | +</div> |
courses/templates/subject/index.html
@@ -3,89 +3,101 @@ | @@ -3,89 +3,101 @@ | ||
3 | {% load static i18n permission_tags professor_access %} | 3 | {% load static i18n permission_tags professor_access %} |
4 | 4 | ||
5 | {% block breadcrumbs %} | 5 | {% block breadcrumbs %} |
6 | - | ||
7 | - <ol class="breadcrumb"> | ||
8 | - <li><a href="{% url 'app:index' %}">{% trans 'Home' %}</a></li> | ||
9 | - <li><a href="{% url 'course:view' course.slug %}">{{ course }}</a></li> | ||
10 | - {% if user|has_role:'professor' or user|has_role:'system_admin' %} | ||
11 | - <li class="active">{% trans 'Manage Subjects' %}</li> | ||
12 | - {% else %} | ||
13 | - <li class="active">{{ subject.name }}</li> | ||
14 | - {% endif %} | ||
15 | - | ||
16 | - </ol> | 6 | +<ol class="breadcrumb"> |
7 | + <li><a href="{% url 'app:index' %}">{% trans 'Home' %}</a></li> | ||
8 | + <li><a href="{% url 'course:manage' %}">{% trans 'Courses' %}</a></li> | ||
9 | + <li><a href="{% url 'course:view' course.slug %}">{{ course }}</a></li> | ||
10 | + <li class="active">{{ subject }}</li> | ||
11 | +</ol> | ||
17 | {% endblock %} | 12 | {% endblock %} |
18 | - | ||
19 | {% block sidebar %} | 13 | {% block sidebar %} |
20 | - <div class="panel panel-primary navigation"> | ||
21 | - <div class="panel-heading"> | ||
22 | - <h5>{% trans 'Menu' %}</h5> | ||
23 | - </div> | ||
24 | - <div class="panel-body"> | ||
25 | - <ul class="nav nav-pills nav-stacked"> | ||
26 | - <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li> | ||
27 | - <li><a href="{% url 'course:manage' %}">{% trans 'My Courses' %}</a></li> | ||
28 | - </ul> | ||
29 | - </div> | 14 | +<div class="panel panel-primary"> |
15 | + <div class="panel-heading"> | ||
16 | + <h4>{% trans 'Menu' %}</h4> | ||
17 | + </div> | ||
18 | + <div class="panel-body"> | ||
19 | + <ul class="nav nav-pills nav-stacked"> | ||
20 | + <li><a href="{% url 'app:index' %}">{% trans 'Home' %}</a></li> | ||
21 | + <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li> | ||
22 | + {% if user|has_role:'student' or not user.is_staff %} | ||
23 | + <li><a href="{% url 'course:manage' %}">{% trans 'My courses' %}</a></li> | ||
24 | + <li><a href="{% url 'core:guest' %}">{% trans 'All Courses' %}</a></li> | ||
25 | + {% endif %} | ||
26 | + {% if user|has_role:'system_admin' %} | ||
27 | + <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li> | ||
28 | + {% endif %} | ||
29 | + {% if user|has_role:'system_admin' or user|has_role:'professor' %} | ||
30 | + <li> | ||
31 | + <a href="#courses_list" class="accordion" data-toggle="collapse">{% trans 'Manage Courses' %}</a> | ||
32 | + <div id="courses_list" class="collapse"> | ||
33 | + <ul class="nav nav-pill nav-stacked accordion_list"> | ||
34 | + {% for course in courses_list %} | ||
35 | + <li><a href="{% url 'course:view' course.slug %}">{{ course }}</a></li> | ||
36 | + {% endfor %} | ||
37 | + </ul> | ||
38 | + </div> | ||
39 | + </li> | ||
40 | + {% endif %} | ||
41 | + </ul> | ||
30 | </div> | 42 | </div> |
43 | +</div> | ||
31 | 44 | ||
32 | 45 | ||
33 | {% endblock %} | 46 | {% endblock %} |
34 | 47 | ||
35 | {% block content %} | 48 | {% block content %} |
36 | <div class="panel panel-info"> | 49 | <div class="panel panel-info"> |
37 | - <div class="panel-heading"> | ||
38 | - <div class="row"> | ||
39 | - <div class="col-md-10 col-sm-10"> | ||
40 | - <h3>{{subject}}</h3> | ||
41 | - </div> | ||
42 | - {% professor_subject subject user as subject_professor%} | ||
43 | - {% if subject_professor %} | ||
44 | - <div class="col-xs-4 col-md-2 divMoreActions"> | ||
45 | - <div class="btn-group"> | ||
46 | - <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
47 | - <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i> | ||
48 | - </button> | ||
49 | - <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> | ||
50 | - <li><a href="javascript:void(0)"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i> {% trans "Replicate" %}</a></li> | ||
51 | - <li><a href="{% url 'course:update_subject' subject.slug %}" <i class="fa fa-pencil fa-fw" aria-hidden="true"></i> {% trans "Edit" %}</a></li> | ||
52 | - <li><a href="{% url 'course:delete_subject' subject.slug %}" ><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans "Remove" %}</a></li> | ||
53 | - </ul> | ||
54 | - </div> | ||
55 | - </div> | ||
56 | - {% endif %} | ||
57 | - </div> | ||
58 | - </div> | ||
59 | - <div class="panel-body"> | ||
60 | - <p><b>{% trans "Professor" %}:</b> {{subject.professors}}</p> | ||
61 | - <p> | ||
62 | - <b>{% trans "Description" %}:</b> | ||
63 | - {{subject.description|linebreaks}} | ||
64 | - </p> | ||
65 | - <div class="row"> | ||
66 | - <div class="col-xs-6 col-md-6"> | ||
67 | - <p><b>{% trans "Beginning" %}:</b> {{subject.init_date}}</p> | ||
68 | - </div> | ||
69 | - <div class="col-xs-6 col-md-6"> | ||
70 | - <p><b>{% trans "End" %}:</b> {{subject.end_date}}</p> | ||
71 | - </div> | ||
72 | - </div> | ||
73 | - </div> | ||
74 | - </div> | ||
75 | - | ||
76 | - {% for topic in topics %} | ||
77 | - {% professor_subject topic.subject user as topic_professor%} | ||
78 | - {% if topic_professor %} | ||
79 | - {% include "subject/form_view_teacher.html" %} | ||
80 | - {% else %} | ||
81 | - {% include "subject/form_view_student.html" %} | ||
82 | - {% endif %} | ||
83 | - {% endfor %} | ||
84 | - {% professor_subject subject user as professor_sub %} | ||
85 | - {% if professor_sub %} | ||
86 | - <div class="form-group"> | ||
87 | - <a href="{% url 'course:create_topic' subject.slug %}" data-toggle="modal" data-target="" class="btn btn-primary btn-lg btn-block btn-raised" name="create_topic">{% trans "Create Topic" %}<div class="ripple-container"></div></a> | 50 | + <div class="panel-heading course-detail"> |
51 | + <div class="row"> | ||
52 | + <div class="col-md-10 col-sm-10"> | ||
53 | + <h4>{{subject}}</h4> | ||
54 | + </div> | ||
55 | + <div class="col-xs-4 col-md-2 divMoreActions"> | ||
56 | + {% professor_subject subject user as subject_professor%} | ||
57 | + {% if subject_professor %} | ||
58 | + <div class="btn-group"> | ||
59 | + <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
60 | + <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i> | ||
61 | + </button> | ||
62 | + <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> | ||
63 | + <li><a href="javascript:void(0)"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i> {% trans "Replicate" %}</a></li> | ||
64 | + <li><a href="{% url 'course:update_subject' subject.slug %}" <i class="fa fa-pencil fa-fw" aria-hidden="true"></i> {% trans "Edit" %}</a></li> | ||
65 | + <li><a href="{% url 'course:delete_subject' subject.slug %}" ><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans "Remove" %}</a></li> | ||
66 | + </ul> | ||
67 | + </div> | ||
68 | + {% endif %} | ||
69 | + </div> | ||
70 | + </div> | ||
71 | + </div> | ||
72 | + <div class="panel-body"> | ||
73 | + <p><b>{% trans "Professor" %}:</b> {% for professor in subject.professors.all %}{% if not forloop.first %},{% endif %} | ||
74 | + {{professor}}{% if forloop.last %}.{% endif %}{% endfor %}</p> | ||
75 | + <p> | ||
76 | + <b>{% trans "Description" %}:</b> | ||
77 | + {{subject.description|linebreaks}} | ||
78 | + </p> | ||
79 | + <div class="row"> | ||
80 | + <div class="col-xs-6 col-md-6"> | ||
81 | + <p><b>{% trans "Beginning" %}:</b> {{subject.init_date}}</p> | ||
82 | + </div> | ||
83 | + <div class="col-xs-6 col-md-6"> | ||
84 | + <p><b>{% trans "End" %}:</b> {{subject.end_date}}</p> | ||
85 | + </div> | ||
88 | </div> | 86 | </div> |
89 | - {% endif %} | ||
90 | - | 87 | + </div> |
88 | + </div> | ||
89 | + {% for topic in topics %} | ||
90 | + {% professor_subject topic.subject user as topic_professor%} | ||
91 | + {% if topic_professor %} | ||
92 | + {% include "subject/form_view_teacher.html" %} | ||
93 | + {% else %} | ||
94 | + {% include "subject/form_view_student.html" %} | ||
95 | + {% endif %} | ||
96 | + {% endfor %} | ||
97 | + {% professor_subject subject user as professor_sub %} | ||
98 | + {% if professor_sub %} | ||
99 | + <div class="form-group"> | ||
100 | + <a href="{% url 'course:create_topic' subject.slug %}" data-toggle="modal" data-target="" class="btn btn-primary btn-lg btn-block btn-raised" name="create_topic">{% trans "Create Topic" %}<div class="ripple-container"></div></a> | ||
101 | + </div> | ||
102 | + {% endif %} | ||
91 | {% endblock %} | 103 | {% endblock %} |
courses/templates/subject/poll_item_actions.html
@@ -6,9 +6,9 @@ | @@ -6,9 +6,9 @@ | ||
6 | {% for poll in polls %} | 6 | {% for poll in polls %} |
7 | {% professor_subject poll.topic.subject request.user as permission%} | 7 | {% professor_subject poll.topic.subject request.user as permission%} |
8 | {% if permission %} | 8 | {% if permission %} |
9 | - <li id="poll_{{poll.slug}}"><i class="material-icons">poll</i> <a href="javascript:modal.get('{% url 'course:poll:update_poll' poll.slug %}','#poll','#modal_poll');">{{ poll.name }}</a><a href="javascript:modal.get('{% url 'course:poll:delete_poll' poll.slug %}','#poll','#modal_poll');"><span class="glyphicon glyphicon-remove"></span></a></li> | 9 | + <li id="poll_{{poll.slug}}"><i class="material-icons">{% trans 'poll' %}</i> <a href="javascript:modal.get('{% url 'course:poll:update_poll' poll.slug %}','#poll','#modal_poll');">{{ poll.name }}</a><a href="javascript:modal.get('{% url 'course:poll:delete_poll' poll.slug %}','#poll','#modal_poll');"><span class="glyphicon glyphicon-remove"></span></a></li> |
10 | {% else %} | 10 | {% else %} |
11 | - <li id="poll_{{poll.slug}}"><i class="material-icons">poll</i> <a href="javascript:modal.get('{% url 'course:poll:view_poll' poll.slug %}','#poll','#modal_poll');">{{ poll.name }}</a></li> | 11 | + <li id="poll_{{poll.slug}}"><i class="material-icons">{% trans 'poll' %}</i> <a href="javascript:modal.get('{% url 'course:poll:view_poll' poll.slug %}','#poll','#modal_poll');">{{ poll.name }}</a></li> |
12 | {% endif %} | 12 | {% endif %} |
13 | {% endfor %} | 13 | {% endfor %} |
14 | {# <button class="btn btn-primary btn-raised" onclick="javascript:modal.get('{% url 'course:poll:create_poll' topic.slug%}','#poll','#modal_poll');">{% trans '+ Create Poll' %}</button> #} | 14 | {# <button class="btn btn-primary btn-raised" onclick="javascript:modal.get('{% url 'course:poll:create_poll' topic.slug%}','#poll','#modal_poll');">{% trans '+ Create Poll' %}</button> #} |
@@ -0,0 +1,110 @@ | @@ -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 | \ No newline at end of file | 111 | \ No newline at end of file |
courses/templates/topic/index.html
@@ -28,7 +28,7 @@ | @@ -28,7 +28,7 @@ | ||
28 | 28 | ||
29 | {% block sidebar %} | 29 | {% block sidebar %} |
30 | 30 | ||
31 | - <div class="panel panel-primary navigation"> | 31 | + <div class="panel panel-primary"> |
32 | <div class="panel-heading"> | 32 | <div class="panel-heading"> |
33 | <h5>{% trans 'Menu' %}</h5> | 33 | <h5>{% trans 'Menu' %}</h5> |
34 | </div> | 34 | </div> |
@@ -41,6 +41,7 @@ | @@ -41,6 +41,7 @@ | ||
41 | </div> | 41 | </div> |
42 | 42 | ||
43 | 43 | ||
44 | + | ||
44 | {% endblock %} | 45 | {% endblock %} |
45 | 46 | ||
46 | {% block content %} | 47 | {% block content %} |
@@ -105,12 +106,12 @@ | @@ -105,12 +106,12 @@ | ||
105 | <div class="panel-body"> | 106 | <div class="panel-body"> |
106 | <div class="row"> | 107 | <div class="row"> |
107 | <div class="col-md-4"> | 108 | <div class="col-md-4"> |
108 | - <i class="fa fa-file-archive-o fa-lg" aria-hidden="true">Atividade.doc</i> | 109 | + <i class="fa fa-file-archive-o fa-lg" aria-hidden="true">{% trans 'Atividade.doc' %}</i> |
109 | </div> | 110 | </div> |
110 | {% professor_subject subject user as permi_test%} | 111 | {% professor_subject subject user as permi_test%} |
111 | {% if permi_test %} | 112 | {% if permi_test %} |
112 | <div class="col-md-4"> | 113 | <div class="col-md-4"> |
113 | - <label> Nota:</label> | 114 | + <label> {% trans 'Grade' %}:</label> |
114 | <input type="number" step="0.01"> | 115 | <input type="number" step="0.01"> |
115 | </div> | 116 | </div> |
116 | {% else %} | 117 | {% else %} |
@@ -120,7 +121,7 @@ | @@ -120,7 +121,7 @@ | ||
120 | <div class="form-group {% if form.pdf.errors %} has-error {% endif %}"> | 121 | <div class="form-group {% if form.pdf.errors %} has-error {% endif %}"> |
121 | {{ form.as_p }} | 122 | {{ form.as_p }} |
122 | </div> | 123 | </div> |
123 | - <button type="submit" class="btn btn-success" id="send_button">Enviar</button> | 124 | + <button type="submit" class="btn btn-success" id="send_button">{% trans 'Send' %}</button> |
124 | </div> | 125 | </div> |
125 | {% endif %} | 126 | {% endif %} |
126 | </div> | 127 | </div> |
courses/templates/topic/link_topic_list.html
1 | {% load static i18n list_topic_foruns permission_tags %} | 1 | {% load static i18n list_topic_foruns permission_tags %} |
2 | <div id="list-topic{{ topic.id }}-links"> | 2 | <div id="list-topic{{ topic.id }}-links"> |
3 | {% for link in links%} | 3 | {% for link in links%} |
4 | - <li><i class="fa fa-link" aria-hidden="true"></i> <a href="javascript:get_modal_link('{% url 'course:links:view_link' link.slug %}', '#viewLinkModal','#divModalLink')">{{link}}</a></li> | 4 | + <li id = "link_{{ link.slug }}"><i class="fa fa-link" aria-hidden="true"></i> <a href="javascript:get_modal_link('{% url 'course:links:view_link' link.slug %}', '#viewLinkModal','#divModalLink')">{{link.name}}</a></li> |
5 | {% endfor %} | 5 | {% endfor %} |
6 | </div> | 6 | </div> |
7 | <div class = 'row' id ="divModalLink"> | 7 | <div class = 'row' id ="divModalLink"> |
courses/templates/topic/link_topic_list_edit.html
@@ -2,8 +2,12 @@ | @@ -2,8 +2,12 @@ | ||
2 | <div id="list-topic{{ topic.id }}-links-edit"> | 2 | <div id="list-topic{{ topic.id }}-links-edit"> |
3 | {% for link in links%} | 3 | {% for link in links%} |
4 | 4 | ||
5 | - <li class="icon_edit_remove"> <a href="#" data-toggle="modal" data-target="#linksModalEdit"><i class="fa fa-pencil fa-lg" aria-hidden="true"></i></a> <a href="#" data-toggle="modal" data-target="#removeLink"><i class="fa fa-trash fa-lg" aria-hidden="true"></i></a></li> | ||
6 | - <li><i class="fa fa-link" aria-hidden="true"></i> <a href="javascript:get_modal_link('{% url 'course:links:view_link' link.slug %}', '#viewLinkModal','#divModalLink')">{{link}}</a></li> | 5 | + <li class="icon_edit_remove" id = "link_edit_icon_{{ link.slug }}"> <a href="javascript:get_modal_link('{% url 'course:links:update_link' link.slug %}', '#linksModalEdit', '#divModalLinkUpdate')"><i class="fa fa-pencil fa-lg" aria-hidden="true"></i></a> <a href="javascript:get_modal_link('{% url 'course:links:delete_link' link.slug %}', '#linkDeleteModal', '#divModalLinkUpdate')"><i class="fa fa-trash fa-lg" aria-hidden="true"></i></a></li> |
6 | + <li id="link_edit_{{ link.slug }}"><i class="fa fa-link" aria-hidden="true"></i> <a href="javascript:get_modal_link('{% url 'course:links:view_link' link.slug %}', '#viewLinkModal','#divModalLink')">{{link.name}}</a></li> | ||
7 | 7 | ||
8 | {% endfor %} | 8 | {% endfor %} |
9 | </div> | 9 | </div> |
10 | + | ||
11 | +<div class="row" id="divModalLinkUpdate"> | ||
12 | + | ||
13 | +</div> |
courses/templates/topic/list_file.html
@@ -2,7 +2,7 @@ | @@ -2,7 +2,7 @@ | ||
2 | 2 | ||
3 | <div id="list-topic{{ topic.id }}-files"> | 3 | <div id="list-topic{{ topic.id }}-files"> |
4 | {% for file in files %} | 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 | {% endfor %} | 6 | {% endfor %} |
7 | </div> | 7 | </div> |
8 | 8 |
courses/templates/topic/list_topic_foruns.html
1 | -{% for forum in foruns %} | ||
2 | - <li><i class="fa fa-commenting" aria-hidden="true"></i> <a id="forum_{{ forum.id }}" href="{% url 'course:forum:view' forum.slug %}"> {{ forum }}</a></li> | ||
3 | -{% endfor %} | ||
4 | \ No newline at end of file | 1 | \ No newline at end of file |
2 | +<div class="foruns_list"> | ||
3 | + {% for forum in foruns %} | ||
4 | + <li><i class="fa fa-commenting" aria-hidden="true"></i> <a id="forum_{{ forum.id }}" href="{% url 'course:forum:view' forum.slug %}"> {{ forum }}</a></li> | ||
5 | + {% endfor %} | ||
6 | +</div> | ||
5 | \ No newline at end of file | 7 | \ No newline at end of file |
courses/templatetags/custom_filters.py
@@ -4,6 +4,19 @@ from rolepermissions.verifications import has_role | @@ -4,6 +4,19 @@ from rolepermissions.verifications import has_role | ||
4 | register = template.Library() | 4 | register = template.Library() |
5 | 5 | ||
6 | @register.filter | 6 | @register.filter |
7 | +def hide_subscribe_view_btn(user, subject): | ||
8 | + if not user is None: | ||
9 | + if user.is_authenticated: | ||
10 | + if has_role(user, 'student') and not user.is_staff: | ||
11 | + if user in subject.course.students.all(): | ||
12 | + if not user in subject.students.all(): | ||
13 | + return True | ||
14 | + else: | ||
15 | + return True | ||
16 | + | ||
17 | + return False | ||
18 | + | ||
19 | +@register.filter | ||
7 | def show_subject_subscribe(user, subject): | 20 | def show_subject_subscribe(user, subject): |
8 | if not user is None: | 21 | if not user is None: |
9 | if user.is_authenticated: | 22 | if user.is_authenticated: |
courses/urls.py
@@ -3,10 +3,10 @@ from django.conf.urls import url, include | @@ -3,10 +3,10 @@ from django.conf.urls import url, include | ||
3 | from . import views | 3 | from . import views |
4 | urlpatterns = [ | 4 | urlpatterns = [ |
5 | url(r'^$', views.IndexView.as_view(), name='manage'), | 5 | url(r'^$', views.IndexView.as_view(), name='manage'), |
6 | + url(r'^all-courses/$', views.AllCoursesView.as_view(), name='all_courses'), | ||
6 | url(r'^create/$', views.CreateCourseView.as_view(), name='create'), | 7 | url(r'^create/$', views.CreateCourseView.as_view(), name='create'), |
7 | url(r'^replicate_course/(?P<slug>[\w_-]+)/$', views.ReplicateCourseView.as_view(), name='replicate_course'), | 8 | url(r'^replicate_course/(?P<slug>[\w_-]+)/$', views.ReplicateCourseView.as_view(), name='replicate_course'), |
8 | url(r'^edit/(?P<slug>[\w_-]+)/$', views.UpdateCourseView.as_view(), name='update'), | 9 | url(r'^edit/(?P<slug>[\w_-]+)/$', views.UpdateCourseView.as_view(), name='update'), |
9 | - url(r'^(?P<slug>[\w_-]+)/$', views.CourseView.as_view(), name='view'), | ||
10 | url(r'^delete/(?P<slug>[\w_-]+)/$', views.DeleteCourseView.as_view(), name='delete'), | 10 | url(r'^delete/(?P<slug>[\w_-]+)/$', views.DeleteCourseView.as_view(), name='delete'), |
11 | url(r'^subscribe/(?P<slug>[\w_-]+)/$', views.subscribe_course, name='subscribe'), | 11 | url(r'^subscribe/(?P<slug>[\w_-]+)/$', views.subscribe_course, name='subscribe'), |
12 | url(r'^category/(?P<slug>[\w_-]+)/$', views.FilteredView.as_view(), name='filter'), | 12 | url(r'^category/(?P<slug>[\w_-]+)/$', views.FilteredView.as_view(), name='filter'), |
@@ -28,5 +28,10 @@ urlpatterns = [ | @@ -28,5 +28,10 @@ urlpatterns = [ | ||
28 | url(r'^exam/', include('exam.urls', namespace = 'exam')), | 28 | url(r'^exam/', include('exam.urls', namespace = 'exam')), |
29 | url(r'^files/', include('files.urls', namespace = 'file')), | 29 | url(r'^files/', include('files.urls', namespace = 'file')), |
30 | url(r'^upload-material/$', views.UploadMaterialView.as_view(), name='upload_material'), | 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'), | ||
31 | url(r'^links/',include('links.urls',namespace = 'links')), | 32 | url(r'^links/',include('links.urls',namespace = 'links')), |
33 | + url(r'^(?P<slug>[\w_-]+)/', include([ | ||
34 | + url(r'^$', views.CourseView.as_view(), name='view'), | ||
35 | + url(r'^(?P<category>[\w_-]+)/$', views.CourseView.as_view(), name='view_filter') | ||
36 | + ])), | ||
32 | ] | 37 | ] |
courses/views.py
@@ -9,9 +9,10 @@ from django.core.urlresolvers import reverse_lazy | @@ -9,9 +9,10 @@ from django.core.urlresolvers import reverse_lazy | ||
9 | from django.utils.translation import ugettext_lazy as _ | 9 | from django.utils.translation import ugettext_lazy as _ |
10 | from rolepermissions.verifications import has_role | 10 | from rolepermissions.verifications import has_role |
11 | from django.db.models import Q | 11 | from django.db.models import Q |
12 | +import operator | ||
13 | +from functools import reduce | ||
12 | from rolepermissions.verifications import has_object_permission | 14 | from rolepermissions.verifications import has_object_permission |
13 | from django.http import HttpResponseRedirect, JsonResponse | 15 | from django.http import HttpResponseRedirect, JsonResponse |
14 | - | ||
15 | from .forms import CourseForm, UpdateCourseForm, CategoryCourseForm, SubjectForm,TopicForm,ActivityForm | 16 | from .forms import CourseForm, UpdateCourseForm, CategoryCourseForm, SubjectForm,TopicForm,ActivityForm |
16 | from .models import Course, Subject, CourseCategory,Topic, SubjectCategory,Activity, CategorySubject | 17 | from .models import Course, Subject, CourseCategory,Topic, SubjectCategory,Activity, CategorySubject |
17 | from core.mixins import NotificationMixin | 18 | from core.mixins import NotificationMixin |
@@ -30,7 +31,30 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): | @@ -30,7 +31,30 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): | ||
30 | queryset = Course.objects.all() | 31 | queryset = Course.objects.all() |
31 | template_name = 'course/index.html' | 32 | template_name = 'course/index.html' |
32 | context_object_name = 'courses' | 33 | context_object_name = 'courses' |
33 | - paginate_by = 2 | 34 | + paginate_by = 10 |
35 | + aparece = True | ||
36 | + | ||
37 | + | ||
38 | + def get_queryset(self): | ||
39 | + result = super(IndexView, self).get_queryset() | ||
40 | + | ||
41 | + course_search = self.request.GET.get('q', None) | ||
42 | + category_search = self.request.GET.get('category', None) | ||
43 | + if course_search: | ||
44 | + self.aparece = False | ||
45 | + query_list = course_search.split() | ||
46 | + result = result.filter( | ||
47 | + reduce(operator.and_, | ||
48 | + (Q(name__icontains=q) for q in query_list)) | ||
49 | + ) | ||
50 | + if category_search: | ||
51 | + self.aparece = False | ||
52 | + query_list = category_search.split() | ||
53 | + result = result.filter( | ||
54 | + reduce(operator.and_, | ||
55 | + (Q(category__name=category) for category in query_list)) | ||
56 | + ) | ||
57 | + return result | ||
34 | 58 | ||
35 | def get_context_data(self, **kwargs): | 59 | def get_context_data(self, **kwargs): |
36 | context = super(IndexView, self).get_context_data(**kwargs) | 60 | context = super(IndexView, self).get_context_data(**kwargs) |
@@ -42,17 +66,10 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): | @@ -42,17 +66,10 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): | ||
42 | elif has_role(self.request.user,'system_admin'): | 66 | elif has_role(self.request.user,'system_admin'): |
43 | list_courses = queryset.order_by('name') | 67 | list_courses = queryset.order_by('name') |
44 | categorys_courses = CourseCategory.objects.all() | 68 | categorys_courses = CourseCategory.objects.all() |
45 | - else: | 69 | + elif has_role(self.request.user, 'student'): |
46 | list_courses = Course.objects.filter(Q(students = True)|Q(students__name = self.request.user.name)).order_by('name') | 70 | list_courses = Course.objects.filter(Q(students = True)|Q(students__name = self.request.user.name)).order_by('name') |
47 | categorys_courses = CourseCategory.objects.filter(course_category__students__name = self.request.user.name).distinct() | 71 | categorys_courses = CourseCategory.objects.filter(course_category__students__name = self.request.user.name).distinct() |
48 | 72 | ||
49 | - courses_category = Course.objects.filter(category__name = self.request.GET.get('category')) | ||
50 | - none = None | ||
51 | - q = self.request.GET.get('category', None) | ||
52 | - if q is None: | ||
53 | - none = True | ||
54 | - context['none'] = none | ||
55 | - | ||
56 | paginator = Paginator(list_courses, self.paginate_by) | 73 | paginator = Paginator(list_courses, self.paginate_by) |
57 | page = self.request.GET.get('page') | 74 | page = self.request.GET.get('page') |
58 | 75 | ||
@@ -63,23 +80,67 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): | @@ -63,23 +80,67 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): | ||
63 | except EmptyPage: | 80 | except EmptyPage: |
64 | list_courses = paginator.page(paginator.num_pages) | 81 | list_courses = paginator.page(paginator.num_pages) |
65 | 82 | ||
66 | - context['courses_category'] = courses_category | ||
67 | context['list_courses'] = list_courses | 83 | context['list_courses'] = list_courses |
68 | context['categorys_courses'] = categorys_courses | 84 | context['categorys_courses'] = categorys_courses |
85 | + context['aparece'] = self.aparece | ||
69 | 86 | ||
70 | return context | 87 | return context |
71 | 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 | + | ||
72 | def get_queryset(self): | 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 | + | ||
73 | try: | 131 | try: |
74 | - name = self.kwargs['q'] | ||
75 | - except: | ||
76 | - name = '' | ||
77 | - if (name != ''): | ||
78 | - object_list = Course.objects.filter(name__icontains = name) | ||
79 | - else: | ||
80 | - object_list = Course.objects.all() | ||
81 | - return object_list | 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 | ||
82 | 141 | ||
142 | + return context | ||
143 | + | ||
83 | class CreateCourseView(LoginRequiredMixin, HasRoleMixin, NotificationMixin,generic.edit.CreateView): | 144 | class CreateCourseView(LoginRequiredMixin, HasRoleMixin, NotificationMixin,generic.edit.CreateView): |
84 | 145 | ||
85 | allowed_roles = ['professor', 'system_admin'] | 146 | allowed_roles = ['professor', 'system_admin'] |
@@ -125,7 +186,7 @@ class ReplicateCourseView(LoginRequiredMixin, HasRoleMixin, NotificationMixin,ge | @@ -125,7 +186,7 @@ class ReplicateCourseView(LoginRequiredMixin, HasRoleMixin, NotificationMixin,ge | ||
125 | if has_role(self.request.user,'system_admin'): | 186 | if has_role(self.request.user,'system_admin'): |
126 | courses = Course.objects.all() | 187 | courses = Course.objects.all() |
127 | elif has_role(self.request.user,'professor'): | 188 | elif has_role(self.request.user,'professor'): |
128 | - courses = self.request.user.courses.all() | 189 | + courses = self.request.user.courses_professors.all() |
129 | categorys_courses = CourseCategory.objects.all() | 190 | categorys_courses = CourseCategory.objects.all() |
130 | context['courses'] = courses | 191 | context['courses'] = courses |
131 | context['course'] = course | 192 | context['course'] = course |
@@ -197,7 +258,7 @@ class DeleteCourseView(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): | @@ -197,7 +258,7 @@ class DeleteCourseView(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): | ||
197 | return context | 258 | return context |
198 | 259 | ||
199 | 260 | ||
200 | -class CourseView( NotificationMixin, generic.DetailView): | 261 | +class CourseView(NotificationMixin, generic.DetailView): |
201 | 262 | ||
202 | login_url = reverse_lazy("core:home") | 263 | login_url = reverse_lazy("core:home") |
203 | redirect_field_name = 'next' | 264 | redirect_field_name = 'next' |
@@ -210,12 +271,20 @@ class CourseView( NotificationMixin, generic.DetailView): | @@ -210,12 +271,20 @@ class CourseView( NotificationMixin, generic.DetailView): | ||
210 | courses = None | 271 | courses = None |
211 | context = super(CourseView, self).get_context_data(**kwargs) | 272 | context = super(CourseView, self).get_context_data(**kwargs) |
212 | course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | 273 | course = get_object_or_404(Course, slug = self.kwargs.get('slug')) |
274 | + | ||
275 | + category_sub = self.kwargs.get('category', None) | ||
276 | + | ||
213 | if has_role(self.request.user,'system_admin'): | 277 | if has_role(self.request.user,'system_admin'): |
214 | subjects = course.subjects.all() | 278 | subjects = course.subjects.all() |
215 | elif has_role(self.request.user,'professor'): | 279 | elif has_role(self.request.user,'professor'): |
216 | subjects = course.subjects.filter(professors__in=[self.request.user]) | 280 | subjects = course.subjects.filter(professors__in=[self.request.user]) |
217 | elif has_role(self.request.user, 'student') or self.request.user is None: | 281 | elif has_role(self.request.user, 'student') or self.request.user is None: |
218 | subjects = course.subjects.filter(visible=True) | 282 | subjects = course.subjects.filter(visible=True) |
283 | + | ||
284 | + if not category_sub is None: | ||
285 | + cat = get_object_or_404(CategorySubject, slug = category_sub) | ||
286 | + subjects = subjects.filter(category = cat) | ||
287 | + | ||
219 | context['subjects'] = subjects | 288 | context['subjects'] = subjects |
220 | 289 | ||
221 | if has_role(self.request.user,'system_admin'): | 290 | if has_role(self.request.user,'system_admin'): |
@@ -237,13 +306,7 @@ class CourseView( NotificationMixin, generic.DetailView): | @@ -237,13 +306,7 @@ class CourseView( NotificationMixin, generic.DetailView): | ||
237 | 306 | ||
238 | subjects_category = Subject.objects.filter(category__name = self.request.GET.get('category')) | 307 | subjects_category = Subject.objects.filter(category__name = self.request.GET.get('category')) |
239 | 308 | ||
240 | - none = None | ||
241 | - q = self.request.GET.get('category', None) | ||
242 | - if q is None: | ||
243 | - none = True | ||
244 | - context['none'] = none | ||
245 | - | ||
246 | - context['subjects_category'] = subjects_category | 309 | + context['category'] = category_sub |
247 | context['categorys_subjects'] = categorys_subjects | 310 | context['categorys_subjects'] = categorys_subjects |
248 | context['courses'] = courses | 311 | context['courses'] = courses |
249 | context['course'] = course | 312 | context['course'] = course |
@@ -381,6 +444,14 @@ class SubjectsView(LoginRequiredMixin, generic.ListView): | @@ -381,6 +444,14 @@ class SubjectsView(LoginRequiredMixin, generic.ListView): | ||
381 | context_object_name = 'subjects' | 444 | context_object_name = 'subjects' |
382 | model = Subject | 445 | model = Subject |
383 | 446 | ||
447 | + def dispatch(self, *args, **kwargs): | ||
448 | + subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | ||
449 | + | ||
450 | + if(not has_object_permission('view_subject', self.request.user, subject)): | ||
451 | + return self.handle_no_permission() | ||
452 | + | ||
453 | + return super(SubjectsView, self).dispatch(*args, **kwargs) | ||
454 | + | ||
384 | def get_queryset(self): | 455 | def get_queryset(self): |
385 | subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | 456 | subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) |
386 | course = subject.course | 457 | course = subject.course |
@@ -428,6 +499,14 @@ class TopicsView(LoginRequiredMixin, generic.ListView): | @@ -428,6 +499,14 @@ class TopicsView(LoginRequiredMixin, generic.ListView): | ||
428 | context_object_name = 'topics' | 499 | context_object_name = 'topics' |
429 | model = Topic | 500 | model = Topic |
430 | 501 | ||
502 | + def dispatch(self, *args, **kwargs): | ||
503 | + topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | ||
504 | + | ||
505 | + if(not has_object_permission('view_topic', self.request.user, topic)): | ||
506 | + return self.handle_no_permission() | ||
507 | + | ||
508 | + return super(TopicsView, self).dispatch(*args, **kwargs) | ||
509 | + | ||
431 | def get_queryset(self): | 510 | def get_queryset(self): |
432 | topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | 511 | topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) |
433 | subject = topic.subject | 512 | subject = topic.subject |
@@ -633,3 +712,12 @@ class IndexSubjectCategoryView(LoginRequiredMixin, generic.ListView): | @@ -633,3 +712,12 @@ class IndexSubjectCategoryView(LoginRequiredMixin, generic.ListView): | ||
633 | context = super(IndexSubjectCategoryView, self).get_context_data(**kwargs) | 712 | context = super(IndexSubjectCategoryView, self).get_context_data(**kwargs) |
634 | context['subject_categories'] = SubjectCategory.objects.all() | 713 | context['subject_categories'] = SubjectCategory.objects.all() |
635 | return context | 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' | ||
636 | \ No newline at end of file | 724 | \ No newline at end of file |
@@ -0,0 +1,167 @@ | @@ -0,0 +1,167 @@ | ||
1 | +# SOME DESCRIPTIVE TITLE. | ||
2 | +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||
3 | +# This file is distributed under the same license as the PACKAGE package. | ||
4 | +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||
5 | +# | ||
6 | +#, fuzzy | ||
7 | +msgid "" | ||
8 | +msgstr "" | ||
9 | +"Project-Id-Version: PACKAGE VERSION\n" | ||
10 | +"Report-Msgid-Bugs-To: \n" | ||
11 | +"POT-Creation-Date: 2016-10-26 14:47-0300\n" | ||
12 | +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||
13 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||
14 | +"Language-Team: LANGUAGE <LL@li.org>\n" | ||
15 | +"Language: \n" | ||
16 | +"MIME-Version: 1.0\n" | ||
17 | +"Content-Type: text/plain; charset=UTF-8\n" | ||
18 | +"Content-Transfer-Encoding: 8bit\n" | ||
19 | +"Plural-Forms: nplurals=2; plural=(n > 1);\n" | ||
20 | + | ||
21 | +#: exam/forms.py:18 exam/forms.py:22 | ||
22 | +msgid "It is required one these fields." | ||
23 | +msgstr "" | ||
24 | + | ||
25 | +#: exam/forms.py:33 | ||
26 | +msgid "Start date to resolve the exam" | ||
27 | +msgstr "Data de início para resolver o exame" | ||
28 | + | ||
29 | +#: exam/forms.py:35 | ||
30 | +msgid "Maximum date permited to resolve the exam" | ||
31 | +msgstr "Data máxima permitida para resolver o exame" | ||
32 | + | ||
33 | +#: exam/models.py:9 | ||
34 | +msgid "Begin of Course Date" | ||
35 | +msgstr "Data de início do curso" | ||
36 | + | ||
37 | +#: exam/models.py:10 | ||
38 | +msgid "Exibe?" | ||
39 | +msgstr "Exibir?" | ||
40 | + | ||
41 | +#: exam/models.py:13 exam/models.py:35 | ||
42 | +msgid "Exam" | ||
43 | +msgstr "Exame" | ||
44 | + | ||
45 | +#: exam/models.py:14 | ||
46 | +msgid "Exams" | ||
47 | +msgstr "Exames" | ||
48 | + | ||
49 | +#: exam/models.py:21 exam/models.py:27 | ||
50 | +msgid "Answer" | ||
51 | +msgstr "Resposta" | ||
52 | + | ||
53 | +#: exam/models.py:22 | ||
54 | +msgid "Order" | ||
55 | +msgstr "Ordem" | ||
56 | + | ||
57 | +#: exam/models.py:23 exam/models.py:28 | ||
58 | +msgid "Answers" | ||
59 | +msgstr "Respostas" | ||
60 | + | ||
61 | +#: exam/models.py:34 | ||
62 | +msgid "Answered" | ||
63 | +msgstr "Respondida" | ||
64 | + | ||
65 | +#: exam/models.py:36 | ||
66 | +msgid "Answers Students" | ||
67 | +msgstr "Resposta dos estudantes" | ||
68 | + | ||
69 | +#: exam/models.py:37 | ||
70 | +msgid "Student" | ||
71 | +msgstr "Estudante" | ||
72 | + | ||
73 | +#: exam/models.py:38 | ||
74 | +msgid "Answered Date" | ||
75 | +msgstr "Data da resposta" | ||
76 | + | ||
77 | +#: exam/models.py:41 | ||
78 | +msgid "Answer Stundent" | ||
79 | +msgstr "Resposta do estudante" | ||
80 | + | ||
81 | +#: exam/models.py:42 | ||
82 | +msgid "Answers Student" | ||
83 | +msgstr "Respostas dos estudantes" | ||
84 | + | ||
85 | +#: exam/templates/exam/create.html:9 | ||
86 | +msgid "New Exam" | ||
87 | +msgstr "Novo exame" | ||
88 | + | ||
89 | +#: exam/templates/exam/create.html:14 exam/templates/exam/create.html:16 | ||
90 | +msgid "Exam Name" | ||
91 | +msgstr "Nome do exame" | ||
92 | + | ||
93 | +#: exam/templates/exam/create.html:20 | ||
94 | +msgid "Exam's begin date" | ||
95 | +msgstr "Data de início do exame" | ||
96 | + | ||
97 | +#: exam/templates/exam/create.html:22 | ||
98 | +msgid "Begin Date" | ||
99 | +msgstr "Data de início" | ||
100 | + | ||
101 | +#: exam/templates/exam/create.html:26 | ||
102 | +msgid "Exam's end date" | ||
103 | +msgstr "Data final do exame" | ||
104 | + | ||
105 | +#: exam/templates/exam/create.html:28 | ||
106 | +msgid "End Date" | ||
107 | +msgstr "Data final" | ||
108 | + | ||
109 | +#: exam/templates/exam/create.html:35 | ||
110 | +msgid "Allow submissions after deadline?" | ||
111 | +msgstr "Permitir submissões após o prazo?" | ||
112 | + | ||
113 | +#: exam/templates/exam/create.html:44 exam/templates/exam/create.html:47 | ||
114 | +msgid "Question Type" | ||
115 | +msgstr "Tipo de questão" | ||
116 | + | ||
117 | +#: exam/templates/exam/create.html:48 | ||
118 | +msgid "Multiple Choice" | ||
119 | +msgstr "Múltipla escolha" | ||
120 | + | ||
121 | +#: exam/templates/exam/create.html:49 | ||
122 | +msgid "True or False" | ||
123 | +msgstr "Verdadeiro ou falso" | ||
124 | + | ||
125 | +#: exam/templates/exam/create.html:50 | ||
126 | +msgid "Gap Filling" | ||
127 | +msgstr "Preenchimento de lacunas" | ||
128 | + | ||
129 | +#: exam/templates/exam/create.html:51 | ||
130 | +msgid "Discursive Question" | ||
131 | +msgstr "Questão discursiva" | ||
132 | + | ||
133 | +#: exam/templates/exam/create.html:57 | ||
134 | +msgid "add question" | ||
135 | +msgstr "Adicionar questão" | ||
136 | + | ||
137 | +#: exam/templates/exam/create.html:62 | ||
138 | +msgid "Create" | ||
139 | +msgstr "Criar" | ||
140 | + | ||
141 | +#: exam/templates/exam/discursive_question.html:2 | ||
142 | +#: exam/templates/exam/discursive_question.html:4 | ||
143 | +#: exam/templates/exam/multiple_choice_question.html:5 | ||
144 | +#: exam/templates/exam/true_or_false_question.html:20 | ||
145 | +#: exam/templates/exam/true_or_false_question.html:25 | ||
146 | +msgid "Question" | ||
147 | +msgstr "Questão" | ||
148 | + | ||
149 | +#: exam/templates/exam/gap_filling_question.html:2 | ||
150 | +msgid "Gap Filling Question" | ||
151 | +msgstr "Questão de preenchimento de lacunas" | ||
152 | + | ||
153 | +#: exam/templates/exam/multiple_choice_question.html:15 | ||
154 | +msgid "Alternatives" | ||
155 | +msgstr "Alternativas" | ||
156 | + | ||
157 | +#: exam/templates/exam/true_or_false_answer.html:9 | ||
158 | +msgid "Write your alternative" | ||
159 | +msgstr "Escreva sua alternativa" | ||
160 | + | ||
161 | +#: exam/templates/exam/true_or_false_question.html:37 | ||
162 | +msgid "Alternatives: T/F" | ||
163 | +msgstr "Alternativas: V/F" | ||
164 | + | ||
165 | +#: exam/templates/exam/true_or_false_question.html:45 | ||
166 | +msgid "New Alternative" | ||
167 | +msgstr "Nova alternativa" |
exam/templates/exam/create.html.py
@@ -74,9 +74,7 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | @@ -74,9 +74,7 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | ||
74 | XXXXXXXXXXXXXXXXXXXXXXXXX X XXXXXX | 74 | XXXXXXXXXXXXXXXXXXXXXXXXX X XXXXXX |
75 | XXX | 75 | XXX |
76 | XXX | 76 | XXX |
77 | - | ||
78 | XXX XXXXXXXXXXXXXXXX X XX | 77 | XXX XXXXXXXXXXXXXXXX X XX |
79 | - | ||
80 | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX X | 78 | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX X |
81 | XXX XXXXXXX X XXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXX X | 79 | XXX XXXXXXX X XXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXX X |
82 | XXXXXXXXX X | 80 | XXXXXXXXX X |
@@ -85,12 +83,9 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX X | @@ -85,12 +83,9 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX X | ||
85 | XXXXXXXXXX X | 83 | XXXXXXXXXX X |
86 | XXXXXXXXX | 84 | XXXXXXXXX |
87 | XXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 85 | XXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
88 | - | ||
89 | XXXXXXXXXXXXXXXXXXX | 86 | XXXXXXXXXXXXXXXXXXX |
90 | XXX | 87 | XXX |
91 | - | ||
92 | XXX XXXXXXXXXXXXXXXXXX X XX | 88 | XXX XXXXXXXXXXXXXXXXXX X XX |
93 | - | ||
94 | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX X | 89 | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX X |
95 | XXX XXXXXXX X XXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXX X | 90 | XXX XXXXXXX X XXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXX X |
96 | XXXXXXXXX X | 91 | XXXXXXXXX X |
@@ -104,10 +99,8 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX X | @@ -104,10 +99,8 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX X | ||
104 | XXXXXXXXXX X | 99 | XXXXXXXXXX X |
105 | XXXXXXXXX | 100 | XXXXXXXXX |
106 | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 101 | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
107 | - | ||
108 | XXXXXXXXXXXXXXXXXXXXX | 102 | XXXXXXXXXXXXXXXXXXXXX |
109 | XXX | 103 | XXX |
110 | - | ||
111 | XXXXXXXXXXXX X | 104 | XXXXXXXXXXXX X |
112 | XX XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX | 105 | XX XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX |
113 | XXX | 106 | XXX |
exam/templates/exam/gap_filling_question.html
exam/templates/exam/gap_filling_question.html.py
exam/templates/exam/multiple_choice_question.html
1 | +{% load i18n %} | ||
2 | + | ||
1 | <div class="form-group" id="multipleChoice"> | 3 | <div class="form-group" id="multipleChoice"> |
2 | 4 | ||
3 | - <label for="questionName" class="col-md-2 control-label">Question</label> | 5 | + <label for="questionName" class="col-md-2 control-label">{% trans 'Question' %}</label> |
4 | 6 | ||
5 | 7 | ||
6 | <div class="col-md-10"> | 8 | <div class="col-md-10"> |
@@ -10,7 +12,7 @@ | @@ -10,7 +12,7 @@ | ||
10 | 12 | ||
11 | </div> | 13 | </div> |
12 | <div class="form-group"> | 14 | <div class="form-group"> |
13 | - <label for="alternative" class="col-md-2 control-label">Alternatives</label> | 15 | + <label for="alternative" class="col-md-2 control-label">{% trans 'Alternatives' %}</label> |
14 | <div class="col-md-10" id="radios"> | 16 | <div class="col-md-10" id="radios"> |
15 | <div class="radio radio-primary"> | 17 | <div class="radio radio-primary"> |
16 | <label> | 18 | <label> |
@@ -29,7 +31,7 @@ | @@ -29,7 +31,7 @@ | ||
29 | <!-- new alternative button --> | 31 | <!-- new alternative button --> |
30 | <div class="form-group"> | 32 | <div class="form-group"> |
31 | <div class="col-md-12 col-md-offset-2"> | 33 | <div class="col-md-12 col-md-offset-2"> |
32 | - <button type="button" class="btn btn-primary" id="newAlternative">New Alternative</button> | 34 | + <button type="button" class="btn btn-primary" id="newAlternative">{% trans 'New Alternative' %]</button> |
33 | </div> | 35 | </div> |
34 | </div> | 36 | </div> |
35 | <div class="form-group"> | 37 | <div class="form-group"> |
exam/templates/exam/multiple_choice_question.html.py
1 | +BBBB BBBB | ||
2 | + | ||
1 | XXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX | 3 | XXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX |
2 | 4 | ||
3 | - XXXXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 5 | + XXXXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX gettext(u'Question') XXXXXXXX |
4 | 6 | ||
5 | 7 | ||
6 | XXXX XXXXXXXXXXXXXXXXXX | 8 | XXXX XXXXXXXXXXXXXXXXXX |
@@ -10,7 +12,7 @@ XXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX | @@ -10,7 +12,7 @@ XXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX | ||
10 | 12 | ||
11 | XXXXXX | 13 | XXXXXX |
12 | XXXX XXXXXXXXXXXXXXXXXXX | 14 | XXXX XXXXXXXXXXXXXXXXXXX |
13 | - XXXXXX XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 15 | + XXXXXX XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX gettext(u'Alternatives') XXXXXXXX |
14 | XXXX XXXXXXXXXXXXXXXXX XXXXXXXXXXXX | 16 | XXXX XXXXXXXXXXXXXXXXX XXXXXXXXXXXX |
15 | XXXX XXXXXXXXXXXX XXXXXXXXXXXXXXX | 17 | XXXX XXXXXXXXXXXX XXXXXXXXXXXXXXX |
16 | XXXXXXX | 18 | XXXXXXX |
@@ -29,7 +31,7 @@ XXXXXX | @@ -29,7 +31,7 @@ XXXXXX | ||
29 | XXXX XXX XXXXXXXXXXX XXXXXX XXX | 31 | XXXX XXX XXXXXXXXXXX XXXXXX XXX |
30 | XXXX XXXXXXXXXXXXXXXXXXX | 32 | XXXX XXXXXXXXXXXXXXXXXXX |
31 | XXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX | 33 | XXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX |
32 | - XXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX | 34 | + XXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXX XXXXX XXXX XXXXXXXXXXXX XXXXXXXXXXX |
33 | XXXXXX | 35 | XXXXXX |
34 | XXXXXX | 36 | XXXXXX |
35 | XXXX XXXXXXXXXXXXXXXXXXX | 37 | XXXX XXXXXXXXXXXXXXXXXXX |
@@ -0,0 +1,88 @@ | @@ -0,0 +1,88 @@ | ||
1 | +# SOME DESCRIPTIVE TITLE. | ||
2 | +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||
3 | +# This file is distributed under the same license as the PACKAGE package. | ||
4 | +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||
5 | +# | ||
6 | +#, fuzzy | ||
7 | +msgid "" | ||
8 | +msgstr "" | ||
9 | +"Project-Id-Version: PACKAGE VERSION\n" | ||
10 | +"Report-Msgid-Bugs-To: \n" | ||
11 | +"POT-Creation-Date: 2016-10-26 14:47-0300\n" | ||
12 | +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||
13 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||
14 | +"Language-Team: LANGUAGE <LL@li.org>\n" | ||
15 | +"Language: \n" | ||
16 | +"MIME-Version: 1.0\n" | ||
17 | +"Content-Type: text/plain; charset=UTF-8\n" | ||
18 | +"Content-Transfer-Encoding: 8bit\n" | ||
19 | +"Plural-Forms: nplurals=2; plural=(n > 1);\n" | ||
20 | + | ||
21 | +#: files/forms.py:12 files/forms.py:29 | ||
22 | +msgid "File too large (Max 10MB)" | ||
23 | +msgstr "Arquivo muito grande (máximo de 10MB)" | ||
24 | + | ||
25 | +#: files/models.py:20 | ||
26 | +msgid "Professors" | ||
27 | +msgstr "Professores" | ||
28 | + | ||
29 | +#: files/models.py:21 | ||
30 | +msgid "Description" | ||
31 | +msgstr "Descrição" | ||
32 | + | ||
33 | +#: files/models.py:22 files/models.py:27 | ||
34 | +msgid "File" | ||
35 | +msgstr "Arquivo" | ||
36 | + | ||
37 | +#: files/models.py:23 | ||
38 | +msgid "Type file" | ||
39 | +msgstr "Tipo de arquivo" | ||
40 | + | ||
41 | +#: files/models.py:28 | ||
42 | +msgid "Files" | ||
43 | +msgstr "Arquivos" | ||
44 | + | ||
45 | +#: files/templates/files/create_file.html:10 | ||
46 | +msgid "Add File" | ||
47 | +msgstr "Adicionar arquivo" | ||
48 | + | ||
49 | +#: files/templates/files/create_file.html:38 | ||
50 | +#: files/templates/files/update_file.html:40 | ||
51 | +msgid "Choose your file..." | ||
52 | +msgstr "Escolha seu arquivo..." | ||
53 | + | ||
54 | +#: files/templates/files/create_file.html:68 | ||
55 | +#: files/templates/files/update_file.html:73 | ||
56 | +msgid "The file size shouldnt exceed 10MB" | ||
57 | +msgstr "O tamanho máximo não pode exceder 10MB" | ||
58 | + | ||
59 | +#: files/templates/files/create_file.html:74 | ||
60 | +#: files/templates/files/delete_file.html:34 | ||
61 | +#: files/templates/files/update_file.html:79 | ||
62 | +msgid "Close" | ||
63 | +msgstr "Fechar" | ||
64 | + | ||
65 | +#: files/templates/files/create_file.html:75 | ||
66 | +#: files/templates/files/update_file.html:80 | ||
67 | +msgid "Submit" | ||
68 | +msgstr "Enviar" | ||
69 | + | ||
70 | +#: files/templates/files/delete_file.html:12 | ||
71 | +msgid "Delete File" | ||
72 | +msgstr "Deletar arquivo" | ||
73 | + | ||
74 | +#: files/templates/files/delete_file.html:30 | ||
75 | +msgid "Are you sure to delete " | ||
76 | +msgstr "Tem certeza que deseja deletar " | ||
77 | + | ||
78 | +#: files/templates/files/delete_file.html:35 | ||
79 | +msgid "Delete" | ||
80 | +msgstr "Deletar" | ||
81 | + | ||
82 | +#: files/templates/files/update_file.html:12 | ||
83 | +msgid "Edit File" | ||
84 | +msgstr "Editar arquivo" | ||
85 | + | ||
86 | +#: files/templates/files/update_file.html:48 | ||
87 | +msgid "See current file" | ||
88 | +msgstr "Visualizar arquivo atual" |
files/templates/files/create_file.html
@@ -65,14 +65,14 @@ | @@ -65,14 +65,14 @@ | ||
65 | 65 | ||
66 | <div class="form-group"> | 66 | <div class="form-group"> |
67 | <div class="col-md-12 text-center"> | 67 | <div class="col-md-12 text-center"> |
68 | - <p><b>The file size shouldn't exceed 10MB</b></p> | 68 | + <p><b>{% trans 'The file size shouldnt exceed 10MB' %}</b></p> |
69 | </div> | 69 | </div> |
70 | </div> | 70 | </div> |
71 | 71 | ||
72 | <div class="form-group"> | 72 | <div class="form-group"> |
73 | <div class="col-md-12"> | 73 | <div class="col-md-12"> |
74 | <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Close" %}</button> | 74 | <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Close" %}</button> |
75 | - <button class="btn btn-raised btn-primary" type="submit">Submit</button> | 75 | + <button class="btn btn-raised btn-primary" type="submit">{% trans 'Submit' %}</button> |
76 | </div> | 76 | </div> |
77 | </div> | 77 | </div> |
78 | </fieldset> | 78 | </fieldset> |
files/templates/files/create_file.html.py
@@ -65,14 +65,14 @@ XXXX XXXXXXXXXXXXX | @@ -65,14 +65,14 @@ XXXX XXXXXXXXXXXXX | ||
65 | 65 | ||
66 | XXXX XXXXXXXXXXXXXXXXXXX | 66 | XXXX XXXXXXXXXXXXXXXXXXX |
67 | XXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXX | 67 | XXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXX |
68 | - XXXXXXXXX XXXX XXXX XXXXXXXXX XXXXXX XXXXXXXXXXXX | 68 | + XXXXXX gettext(u'The file size shouldnt exceed 10MB') XXXXXXXX |
69 | XXXXXX | 69 | XXXXXX |
70 | XXXXXX | 70 | XXXXXX |
71 | 71 | ||
72 | XXXX XXXXXXXXXXXXXXXXXXX | 72 | XXXX XXXXXXXXXXXXXXXXXXX |
73 | XXXX XXXXXXXXXXXXXXXXXX | 73 | XXXX XXXXXXXXXXXXXXXXXX |
74 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX gettext(u'Close') XXXXXXXXX | 74 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX gettext(u'Close') XXXXXXXXX |
75 | - XXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 75 | + XXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXX gettext(u'Submit') XXXXXXXXX |
76 | XXXXXX | 76 | XXXXXX |
77 | XXXXXX | 77 | XXXXXX |
78 | XXXXXXXXXXX | 78 | XXXXXXXXXXX |
files/templates/files/delete_file.html
@@ -32,7 +32,7 @@ | @@ -32,7 +32,7 @@ | ||
32 | <div class="form-group"> | 32 | <div class="form-group"> |
33 | <div class="col-md-12"> | 33 | <div class="col-md-12"> |
34 | <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Close" %}</button> | 34 | <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Close" %}</button> |
35 | - <button class="btn btn-raised btn-primary" type="submit">Delete</button> | 35 | + <button class="btn btn-raised btn-primary" type="submit">{% trans 'Delete' %}</button> |
36 | </div> | 36 | </div> |
37 | </div> | 37 | </div> |
38 | </fieldset> | 38 | </fieldset> |
files/templates/files/delete_file.html.py
@@ -32,7 +32,7 @@ XXXX XXXXXXXXXXXXXXXXXXXX | @@ -32,7 +32,7 @@ XXXX XXXXXXXXXXXXXXXXXXXX | ||
32 | XXXX XXXXXXXXXXXXXXXXXXX | 32 | XXXX XXXXXXXXXXXXXXXXXXX |
33 | XXXX XXXXXXXXXXXXXXXXXX | 33 | XXXX XXXXXXXXXXXXXXXXXX |
34 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX gettext(u'Close') XXXXXXXXX | 34 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX gettext(u'Close') XXXXXXXXX |
35 | - XXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 35 | + XXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXX gettext(u'Delete') XXXXXXXXX |
36 | XXXXXX | 36 | XXXXXX |
37 | XXXXXX | 37 | XXXXXX |
38 | XXXXXXXXXXX | 38 | XXXXXXXXXXX |
files/templates/files/update_file.html
@@ -70,14 +70,14 @@ | @@ -70,14 +70,14 @@ | ||
70 | 70 | ||
71 | <div class="form-group"> | 71 | <div class="form-group"> |
72 | <div class="col-md-12 text-center"> | 72 | <div class="col-md-12 text-center"> |
73 | - <p><b>The file size shouldn't exceed 10MB</b></p> | 73 | + <p><b>{% trans 'The file size shouldnt exceed 10MB' %}</b></p> |
74 | </div> | 74 | </div> |
75 | </div> | 75 | </div> |
76 | 76 | ||
77 | <div class="form-group"> | 77 | <div class="form-group"> |
78 | <div class="col-md-12"> | 78 | <div class="col-md-12"> |
79 | <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Close" %}</button> | 79 | <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Close" %}</button> |
80 | - <button class="btn btn-raised btn-primary" type="submit">Submit</button> | 80 | + <button class="btn btn-raised btn-primary" type="submit">{% trans 'Submit' %}</button> |
81 | </div> | 81 | </div> |
82 | </div> | 82 | </div> |
83 | </fieldset> | 83 | </fieldset> |
files/templates/files/update_file.html.py
@@ -70,14 +70,14 @@ XXXX XXXXXXXXXXXXXXXXXXXX | @@ -70,14 +70,14 @@ XXXX XXXXXXXXXXXXXXXXXXXX | ||
70 | 70 | ||
71 | XXXX XXXXXXXXXXXXXXXXXXX | 71 | XXXX XXXXXXXXXXXXXXXXXXX |
72 | XXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXX | 72 | XXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXX |
73 | - XXXXXXXXX XXXX XXXX XXXXXXXXX XXXXXX XXXXXXXXXXXX | 73 | + XXXXXX gettext(u'The file size shouldnt exceed 10MB') XXXXXXXX |
74 | XXXXXX | 74 | XXXXXX |
75 | XXXXXX | 75 | XXXXXX |
76 | 76 | ||
77 | XXXX XXXXXXXXXXXXXXXXXXX | 77 | XXXX XXXXXXXXXXXXXXXXXXX |
78 | XXXX XXXXXXXXXXXXXXXXXX | 78 | XXXX XXXXXXXXXXXXXXXXXX |
79 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX gettext(u'Close') XXXXXXXXX | 79 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX gettext(u'Close') XXXXXXXXX |
80 | - XXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 80 | + XXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXX gettext(u'Submit') XXXXXXXXX |
81 | XXXXXX | 81 | XXXXXX |
82 | XXXXXX | 82 | XXXXXX |
83 | XXXXXXXXXXX | 83 | XXXXXXXXXXX |
@@ -0,0 +1,250 @@ | @@ -0,0 +1,250 @@ | ||
1 | +# SOME DESCRIPTIVE TITLE. | ||
2 | +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||
3 | +# This file is distributed under the same license as the PACKAGE package. | ||
4 | +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||
5 | +# | ||
6 | +#, fuzzy | ||
7 | +msgid "" | ||
8 | +msgstr "" | ||
9 | +"Project-Id-Version: PACKAGE VERSION\n" | ||
10 | +"Report-Msgid-Bugs-To: \n" | ||
11 | +"POT-Creation-Date: 2016-10-26 14:47-0300\n" | ||
12 | +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||
13 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||
14 | +"Language-Team: LANGUAGE <LL@li.org>\n" | ||
15 | +"Language: \n" | ||
16 | +"MIME-Version: 1.0\n" | ||
17 | +"Content-Type: text/plain; charset=UTF-8\n" | ||
18 | +"Content-Transfer-Encoding: 8bit\n" | ||
19 | +"Plural-Forms: nplurals=2; plural=(n > 1);\n" | ||
20 | + | ||
21 | +#: forum/forms.py:11 | ||
22 | +msgid "Title" | ||
23 | +msgstr "Título" | ||
24 | + | ||
25 | +#: forum/forms.py:12 forum/models.py:14 | ||
26 | +#: forum/templates/forum/forum_list.html:23 | ||
27 | +#: forum/templates/forum/forum_view.html:58 | ||
28 | +#: forum/templates/forum/render_forum.html:4 | ||
29 | +msgid "Description" | ||
30 | +msgstr "Descrição" | ||
31 | + | ||
32 | +#: forum/forms.py:13 | ||
33 | +msgid "Limit Date" | ||
34 | +msgstr "Data limite" | ||
35 | + | ||
36 | +#: forum/forms.py:16 | ||
37 | +msgid "Forum title" | ||
38 | +msgstr "Título do fórum" | ||
39 | + | ||
40 | +#: forum/forms.py:17 | ||
41 | +msgid "What is this forum about?" | ||
42 | +msgstr "Qual o assunto deste fórum?" | ||
43 | + | ||
44 | +#: forum/forms.py:18 | ||
45 | +msgid "Limit date for students post on this forum" | ||
46 | +msgstr "Data limite para estudantes postarem neste fórum" | ||
47 | + | ||
48 | +#: forum/forms.py:33 forum/forms.py:46 | ||
49 | +msgid "Message" | ||
50 | +msgstr "Mensagem" | ||
51 | + | ||
52 | +#: forum/models.py:15 forum/models.py:33 forum/models.py:61 | ||
53 | +msgid "Modification Date" | ||
54 | +msgstr "Data de modificação" | ||
55 | + | ||
56 | +#: forum/models.py:16 | ||
57 | +msgid "Create Date" | ||
58 | +msgstr "Data de criação" | ||
59 | + | ||
60 | +#: forum/models.py:19 forum/models.py:35 | ||
61 | +#: forum/templates/forum/forum_view.html:16 | ||
62 | +#: forum/templates/forum/forum_view.html:116 | ||
63 | +msgid "Forum" | ||
64 | +msgstr "Fórum" | ||
65 | + | ||
66 | +#: forum/models.py:20 | ||
67 | +msgid "Foruns" | ||
68 | +msgstr "Fóruns" | ||
69 | + | ||
70 | +#: forum/models.py:31 forum/models.py:58 | ||
71 | +msgid "Autor" | ||
72 | +msgstr "Autor" | ||
73 | + | ||
74 | +#: forum/models.py:32 | ||
75 | +msgid "Post message" | ||
76 | +msgstr "Postar mensagem" | ||
77 | + | ||
78 | +#: forum/models.py:34 | ||
79 | +msgid "Post Date" | ||
80 | +msgstr "Data de postagem" | ||
81 | + | ||
82 | +#: forum/models.py:38 forum/models.py:59 | ||
83 | +msgid "Post" | ||
84 | +msgstr "Postar" | ||
85 | + | ||
86 | +#: forum/models.py:39 | ||
87 | +msgid "Posts" | ||
88 | +msgstr "Postagens" | ||
89 | + | ||
90 | +#: forum/models.py:60 | ||
91 | +msgid "Answer message" | ||
92 | +msgstr "Resposta" | ||
93 | + | ||
94 | +#: forum/models.py:62 | ||
95 | +msgid "Answer Date" | ||
96 | +msgstr "Data da resposta" | ||
97 | + | ||
98 | +#: forum/models.py:65 | ||
99 | +msgid "Post Answer" | ||
100 | +msgstr "Postar resposta" | ||
101 | + | ||
102 | +#: forum/models.py:66 | ||
103 | +msgid "Post Answers" | ||
104 | +msgstr "Postar respostas" | ||
105 | + | ||
106 | +#: forum/templates/forum/forum_list.html:16 | ||
107 | +#: forum/templates/forum/forum_view.html:44 | ||
108 | +#: forum/templates/post/post_list.html:20 | ||
109 | +#: forum/templates/post/post_load_more_render.html:20 | ||
110 | +#: forum/templates/post/post_render.html:18 | ||
111 | +#: forum/templates/post_answers/post_answer_list.html:17 | ||
112 | +#: forum/templates/post_answers/post_answer_load_more_render.html:17 | ||
113 | +#: forum/templates/post_answers/post_answer_render.html:15 | ||
114 | +msgid "Edit" | ||
115 | +msgstr "Editar" | ||
116 | + | ||
117 | +#: forum/templates/forum/forum_list.html:17 | ||
118 | +#: forum/templates/forum/forum_view.html:45 | ||
119 | +msgid "Are you sure you want to delete this forum?" | ||
120 | +msgstr "Tem certeza que deseja deletar este fórum?" | ||
121 | + | ||
122 | +#: forum/templates/forum/forum_list.html:17 | ||
123 | +#: forum/templates/forum/forum_view.html:45 | ||
124 | +msgid "Delete" | ||
125 | +msgstr "Deletar" | ||
126 | + | ||
127 | +#: forum/templates/forum/forum_list.html:24 | ||
128 | +#: forum/templates/forum/forum_view.html:59 | ||
129 | +#: forum/templates/forum/render_forum.html:5 | ||
130 | +msgid "Opened in" | ||
131 | +msgstr "Aberto em" | ||
132 | + | ||
133 | +#: forum/templates/forum/forum_list.html:59 | ||
134 | +#: forum/templates/forum/forum_view.html:91 | ||
135 | +#: forum/templates/post_answers/post_answer_form.html:38 | ||
136 | +msgid "send" | ||
137 | +msgstr "Enviar" | ||
138 | + | ||
139 | +#: forum/templates/forum/forum_view.html:13 | ||
140 | +msgid "Home" | ||
141 | +msgstr "Início" | ||
142 | + | ||
143 | +#: forum/templates/forum/forum_view.html:27 | ||
144 | +msgid "Menu" | ||
145 | +msgstr "Menu" | ||
146 | + | ||
147 | +#: forum/templates/forum/forum_view.html:31 | ||
148 | +msgid "Profile" | ||
149 | +msgstr "Perfil" | ||
150 | + | ||
151 | +#: forum/templates/forum/forum_view.html:32 | ||
152 | +msgid "My Courses" | ||
153 | +msgstr "Meus cursos" | ||
154 | + | ||
155 | +#: forum/templates/forum/forum_view.html:40 | ||
156 | +msgid "Actions" | ||
157 | +msgstr "Ações" | ||
158 | + | ||
159 | +#: forum/templates/forum/forum_view.html:44 | ||
160 | +msgid "Forum edited successfully!" | ||
161 | +msgstr "Fórum editado com sucesso!" | ||
162 | + | ||
163 | +#: forum/templates/forum/forum_view.html:124 | ||
164 | +msgid "Close" | ||
165 | +msgstr "Fechar" | ||
166 | + | ||
167 | +#: forum/templates/forum/forum_view.html:125 | ||
168 | +msgid "Update" | ||
169 | +msgstr "Atualizar" | ||
170 | + | ||
171 | +#: forum/templates/post/post_list.html:11 | ||
172 | +#: forum/templates/post/post_load_more_render.html:11 | ||
173 | +#: forum/templates/post/post_render.html:9 | ||
174 | +msgid "reply" | ||
175 | +msgstr "Responder" | ||
176 | + | ||
177 | +#: forum/templates/post/post_list.html:20 | ||
178 | +#: forum/templates/post/post_load_more_render.html:20 | ||
179 | +#: forum/templates/post/post_render.html:18 | ||
180 | +msgid "Post edited successfully!" | ||
181 | +msgstr "Post editado com sucesso!" | ||
182 | + | ||
183 | +#: forum/templates/post/post_list.html:21 | ||
184 | +#: forum/templates/post/post_load_more_render.html:21 | ||
185 | +#: forum/templates/post/post_render.html:19 | ||
186 | +#: forum/templates/post_answers/post_answer_list.html:18 | ||
187 | +#: forum/templates/post_answers/post_answer_load_more_render.html:18 | ||
188 | +#: forum/templates/post_answers/post_answer_render.html:16 | ||
189 | +msgid "Remove" | ||
190 | +msgstr "Remover" | ||
191 | + | ||
192 | +#: forum/templates/post/post_list.html:30 | ||
193 | +#: forum/templates/post/post_load_more_render.html:30 | ||
194 | +#: forum/templates/post/post_render.html:28 | ||
195 | +#: forum/templates/post_answers/post_answer_list.html:26 | ||
196 | +#: forum/templates/post_answers/post_answer_load_more_render.html:26 | ||
197 | +#: forum/templates/post_answers/post_answer_render.html:24 | ||
198 | +msgid "ago" | ||
199 | +msgstr "atrás" | ||
200 | + | ||
201 | +#: forum/templates/post/post_list.html:32 | ||
202 | +#: forum/templates/post/post_load_more_render.html:32 | ||
203 | +#: forum/templates/post/post_render.html:30 | ||
204 | +#: forum/templates/post_answers/post_answer_list.html:28 | ||
205 | +#: forum/templates/post_answers/post_answer_load_more_render.html:28 | ||
206 | +#: forum/templates/post_answers/post_answer_render.html:26 | ||
207 | +msgid "Edited" | ||
208 | +msgstr "Editado" | ||
209 | + | ||
210 | +#: forum/templates/post/post_list.html:54 forum/views.py:196 | ||
211 | +msgid "Load more posts" | ||
212 | +msgstr "Carregar mais postagens" | ||
213 | + | ||
214 | +#: forum/templates/post/post_update_form.html:32 | ||
215 | +#: forum/templates/post_answers/post_answer_form.html:32 | ||
216 | +msgid "Cancel" | ||
217 | +msgstr "Cancelar" | ||
218 | + | ||
219 | +#: forum/templates/post/post_update_form.html:33 | ||
220 | +#: forum/templates/post_answers/post_answer_form.html:33 | ||
221 | +msgid "Save changes" | ||
222 | +msgstr "Salvar mudanças" | ||
223 | + | ||
224 | +#: forum/templates/post_answers/post_answer_list.html:17 | ||
225 | +#: forum/templates/post_answers/post_answer_load_more_render.html:17 | ||
226 | +#: forum/templates/post_answers/post_answer_render.html:15 | ||
227 | +msgid "Answer edited sucessfully!" | ||
228 | +msgstr "Resposta editada com sucesso!" | ||
229 | + | ||
230 | +#: forum/templates/post_answers/post_answer_list.html:18 | ||
231 | +#: forum/templates/post_answers/post_answer_load_more_render.html:18 | ||
232 | +#: forum/templates/post_answers/post_answer_render.html:16 | ||
233 | +msgid "Are you sure you want to delete this answer?" | ||
234 | +msgstr "Tem certeza que deseja deletar esta resposta?" | ||
235 | + | ||
236 | +#: forum/templates/post_answers/post_answer_list.html:42 forum/views.py:295 | ||
237 | +msgid "Load more answers" | ||
238 | +msgstr "Carregar mais respostas" | ||
239 | + | ||
240 | +#: forum/views.py:130 | ||
241 | +msgid "Forum deleted successfully." | ||
242 | +msgstr "Fórum deletado com sucesso." | ||
243 | + | ||
244 | +#: forum/views.py:253 | ||
245 | +msgid "Post deleted successfully." | ||
246 | +msgstr "Postagem deletada com sucesso." | ||
247 | + | ||
248 | +#: forum/views.py:365 | ||
249 | +msgid "Post answer deleted successfully." | ||
250 | +msgstr "Resposta deletada com sucesso." |
@@ -0,0 +1,32 @@ | @@ -0,0 +1,32 @@ | ||
1 | +from rolepermissions.permissions import register_object_checker | ||
2 | +from amadeus.roles import SystemAdmin | ||
3 | + | ||
4 | +@register_object_checker() | ||
5 | +def view_forum(role, user, forum): | ||
6 | + if (role == SystemAdmin): | ||
7 | + return True | ||
8 | + | ||
9 | + if (user in forum.topic.subject.professors.all() or user in forum.topic.subject.students.all()): | ||
10 | + return True | ||
11 | + | ||
12 | + return False | ||
13 | + | ||
14 | +@register_object_checker() | ||
15 | +def edit_forum(role, user, forum): | ||
16 | + if (role == SystemAdmin): | ||
17 | + return True | ||
18 | + | ||
19 | + if (user in forum.topic.subject.professors.all()): | ||
20 | + return True | ||
21 | + | ||
22 | + return False | ||
23 | + | ||
24 | +@register_object_checker() | ||
25 | +def delete_forum(role, user, forum): | ||
26 | + if (role == SystemAdmin): | ||
27 | + return True | ||
28 | + | ||
29 | + if (user in forum.topic.subject.professors.all()): | ||
30 | + return True | ||
31 | + | ||
32 | + return False |
forum/static/js/forum.js
@@ -47,7 +47,7 @@ function createForum(url, topic) { | @@ -47,7 +47,7 @@ function createForum(url, topic) { | ||
47 | $(".forum_form").html(data); | 47 | $(".forum_form").html(data); |
48 | $("#id_topic").val(topic); | 48 | $("#id_topic").val(topic); |
49 | 49 | ||
50 | - setForumCreateFormSubmit(); | 50 | + setForumCreateFormSubmit(topic); |
51 | } | 51 | } |
52 | }); | 52 | }); |
53 | 53 | ||
@@ -59,7 +59,7 @@ function createForum(url, topic) { | @@ -59,7 +59,7 @@ function createForum(url, topic) { | ||
59 | * Function to set the forum's create form submit function | 59 | * Function to set the forum's create form submit function |
60 | * | 60 | * |
61 | */ | 61 | */ |
62 | -function setForumCreateFormSubmit() { | 62 | +function setForumCreateFormSubmit(topic) { |
63 | $('.date-picker').datepicker({ | 63 | $('.date-picker').datepicker({ |
64 | language: locale, | 64 | language: locale, |
65 | }); | 65 | }); |
@@ -70,16 +70,15 @@ function setForumCreateFormSubmit() { | @@ -70,16 +70,15 @@ function setForumCreateFormSubmit() { | ||
70 | type: frm.attr('method'), | 70 | type: frm.attr('method'), |
71 | url: frm.attr('action'), | 71 | url: frm.attr('action'), |
72 | data: frm.serialize(), | 72 | data: frm.serialize(), |
73 | + dataType: "json", | ||
73 | success: function (data) { | 74 | success: function (data) { |
74 | - data = data.split('-'); | ||
75 | - | ||
76 | - $('.foruns_list').append("<li><i class='fa fa-commenting' aria-hidden='true'></i> <a id='forum_"+data[1]+"' href='"+data[0]+"'> "+data[2]+"</a></li>"); | 75 | + $(".topic_" + topic).find('.foruns_list').append("<li><i class='fa fa-commenting' aria-hidden='true'></i> <a id='forum_"+data.forum_id+"' href='"+data.url+"'> "+data.name+"</a></li>"); |
77 | 76 | ||
78 | $("#createForum").modal('hide'); | 77 | $("#createForum").modal('hide'); |
79 | }, | 78 | }, |
80 | error: function(data) { | 79 | error: function(data) { |
81 | $(".forum_form").html(data.responseText); | 80 | $(".forum_form").html(data.responseText); |
82 | - setForumCreateFormSubmit(); | 81 | + setForumCreateFormSubmit(topic); |
83 | } | 82 | } |
84 | }); | 83 | }); |
85 | return false; | 84 | return false; |
@@ -183,7 +182,7 @@ function edit_post(url, post_id, success_message) { | @@ -183,7 +182,7 @@ function edit_post(url, post_id, success_message) { | ||
183 | success: function (data) { | 182 | success: function (data) { |
184 | alertify.success(success_message); | 183 | alertify.success(success_message); |
185 | 184 | ||
186 | - $("#post_"+post_id).parent().after(data); | 185 | + $("#post_"+post_id).parent().after(data.html); |
187 | frm.parent().parent().remove(); | 186 | frm.parent().parent().remove(); |
188 | }, | 187 | }, |
189 | error: function(data) { | 188 | error: function(data) { |
@@ -345,7 +344,7 @@ function edit_post_answer(url, answer_id, success_message) { | @@ -345,7 +344,7 @@ function edit_post_answer(url, answer_id, success_message) { | ||
345 | success: function (data) { | 344 | success: function (data) { |
346 | alertify.success(success_message); | 345 | alertify.success(success_message); |
347 | 346 | ||
348 | - $("#answer_"+answer_id).parent().after(data); | 347 | + $("#answer_"+answer_id).parent().after(data.html); |
349 | frm.parent().parent().remove(); | 348 | frm.parent().parent().remove(); |
350 | }, | 349 | }, |
351 | error: function(data) { | 350 | error: function(data) { |
forum/templates/forum/forum_form.html
@@ -7,6 +7,10 @@ | @@ -7,6 +7,10 @@ | ||
7 | <div class="form-group {% if form.has_error %} has-error {% endif %} is-fileinput"> | 7 | <div class="form-group {% if form.has_error %} has-error {% endif %} is-fileinput"> |
8 | {% if field.field.widget.input_type == 'hidden' %} | 8 | {% if field.field.widget.input_type == 'hidden' %} |
9 | {% render_field field class='form-control' %} | 9 | {% render_field field class='form-control' %} |
10 | + {% elif field.auto_id == 'id_limit_date' %} | ||
11 | + <label for="{{ field.auto_id }}">{{ field.label }}</label> | ||
12 | + <input type="text" class="form-control date-picker"name="{{field.name}}" value="{{field.value|date:'SHORT_DATE_FORMAT'}}" id="{{ field.auto_id }}"> | ||
13 | + <span id="helpBlock" class="help-block">{{ field.help_text }}</span> | ||
10 | {% else %} | 14 | {% else %} |
11 | <label for="{{ field.auto_id }}">{{ field.label }}</label> | 15 | <label for="{{ field.auto_id }}">{{ field.label }}</label> |
12 | {% render_field field %} | 16 | {% render_field field %} |
forum/templates/forum/forum_list.html
@@ -56,7 +56,7 @@ | @@ -56,7 +56,7 @@ | ||
56 | {% endif %} | 56 | {% endif %} |
57 | <span class="input-group-btn"> | 57 | <span class="input-group-btn"> |
58 | <button type="submit" class="btn btn-fab btn-fab-mini"> | 58 | <button type="submit" class="btn btn-fab btn-fab-mini"> |
59 | - <i class="material-icons">send</i> | 59 | + <i class="material-icons">{% trans 'send' %}</i> |
60 | </button> | 60 | </button> |
61 | </span> | 61 | </span> |
62 | </div> | 62 | </div> |
forum/templates/forum/forum_list.html.py
@@ -56,7 +56,7 @@ XXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXBBB BBBBBBBBBBBBBBBBBBBBBBBBBBX XXXXX | @@ -56,7 +56,7 @@ XXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXBBB BBBBBBBBBBBBBBBBBBBBBBBBBBX XXXXX | ||
56 | BBBBB | 56 | BBBBB |
57 | XXXXX XXXXXXXXXXXXXXXXXXXXXXXX | 57 | XXXXX XXXXXXXXXXXXXXXXXXXXXXXX |
58 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXX XXXXXXXXXXXXXX | 58 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXX XXXXXXXXXXXXXX |
59 | - XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 59 | + XX XXXXXXXXXXXXXXXXXXXXXXX gettext(u'send') XXXX |
60 | XXXXXXXXX | 60 | XXXXXXXXX |
61 | XXXXXXX | 61 | XXXXXXX |
62 | XXXXXX | 62 | XXXXXX |
forum/templates/forum/forum_view.html
@@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
34 | </div> | 34 | </div> |
35 | </div> | 35 | </div> |
36 | 36 | ||
37 | - {% if request.user|has_role:'system_admin' or request.user|has_role:'professor' and request.user == post.user %} | 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"> | 38 | <div class="panel panel-primary navigation"> |
39 | <div class="panel-heading"> | 39 | <div class="panel-heading"> |
40 | <h3 class="panel-title">{% trans 'Actions' %}</h3> | 40 | <h3 class="panel-title">{% trans 'Actions' %}</h3> |
@@ -88,7 +88,7 @@ | @@ -88,7 +88,7 @@ | ||
88 | {% endif %} | 88 | {% endif %} |
89 | <span class="input-group-btn"> | 89 | <span class="input-group-btn"> |
90 | <button type="submit" class="btn btn-fab btn-fab-mini"> | 90 | <button type="submit" class="btn btn-fab btn-fab-mini"> |
91 | - <i class="material-icons">send</i> | 91 | + <i class="material-icons">{% trans 'send' %}</i> |
92 | </button> | 92 | </button> |
93 | </span> | 93 | </span> |
94 | </div> | 94 | </div> |
forum/templates/forum/forum_view.html.py
@@ -34,7 +34,7 @@ BBBBB BBBBBBB | @@ -34,7 +34,7 @@ BBBBB BBBBBBB | ||
34 | XXXXXX | 34 | XXXXXX |
35 | XXXXXX | 35 | XXXXXX |
36 | 36 | ||
37 | - BB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBB BBBBBBBBBBBB BB BBBBBBBBB | 37 | + BB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBB BBBBBBBBBBBB BB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB |
38 | XXXX XXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXX | 38 | XXXX XXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXX |
39 | XXXX XXXXXXXXXXXXXXXXXXXXXX | 39 | XXXX XXXXXXXXXXXXXXXXXXXXXX |
40 | XXX XXXXXXXXXXXXXXXXXXXX gettext(u'Actions') XXXXX | 40 | XXX XXXXXXXXXXXXXXXXXXXX gettext(u'Actions') XXXXX |
@@ -88,7 +88,7 @@ BBBBB BBBBBBB | @@ -88,7 +88,7 @@ BBBBB BBBBBBB | ||
88 | BBBBB | 88 | BBBBB |
89 | XXXXX XXXXXXXXXXXXXXXXXXXXXXXX | 89 | XXXXX XXXXXXXXXXXXXXXXXXXXXXXX |
90 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXX XXXXXXXXXXXXXX | 90 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXX XXXXXXXXXXXXXX |
91 | - XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 91 | + XX XXXXXXXXXXXXXXXXXXXXXXX gettext(u'send') XXXX |
92 | XXXXXXXXX | 92 | XXXXXXXXX |
93 | XXXXXXX | 93 | XXXXXXX |
94 | XXXXXX | 94 | XXXXXX |
forum/templates/post/post_list.html
@@ -8,7 +8,7 @@ | @@ -8,7 +8,7 @@ | ||
8 | {{ post.user }} | 8 | {{ post.user }} |
9 | <div class="pull-right"> | 9 | <div class="pull-right"> |
10 | <a href="javascript:answer('{{ post.id }}', '{% url 'course:forum:reply_post' %}');"> | 10 | <a href="javascript:answer('{{ post.id }}', '{% url 'course:forum:reply_post' %}');"> |
11 | - <i class="material-icons">reply</i> | 11 | + <i class="material-icons">{% trans 'reply' %}</i> |
12 | </a> | 12 | </a> |
13 | {% if request.user|has_role:'system_admin' or request.user == post.user %} | 13 | {% if request.user|has_role:'system_admin' or request.user == post.user %} |
14 | {% csrf_token %} | 14 | {% csrf_token %} |
forum/templates/post/post_list.html.py
@@ -8,7 +8,7 @@ BB BBBBBBBBBBBB B B | @@ -8,7 +8,7 @@ BB BBBBBBBBBBBB B B | ||
8 | 8 | ||
9 | XXXX XXXXXXXXXXXXXXXXXXX | 9 | XXXX XXXXXXXXXXXXXXXXXXX |
10 | XX XXXXXXXXXXXXXXXXXXXXXXXXXXX XBBB BBBBBBBBBBBBBBBBBBBBBBBBBXXXXX | 10 | XX XXXXXXXXXXXXXXXXXXXXXXXXXXX XBBB BBBBBBBBBBBBBBBBBBBBBBBBBXXXXX |
11 | - XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 11 | + XX XXXXXXXXXXXXXXXXXXXXXXX gettext(u'reply') XXXX |
12 | XXXX | 12 | XXXX |
13 | BB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BB BBBBBBBBBBBB BB BBBBBBBBB | 13 | BB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BB BBBBBBBBBBBB BB BBBBBBBBB |
14 | BBBBBBBBBB | 14 | BBBBBBBBBB |
forum/templates/post/post_load_more_render.html
@@ -8,7 +8,7 @@ | @@ -8,7 +8,7 @@ | ||
8 | {{ post.user }} | 8 | {{ post.user }} |
9 | <div class="pull-right"> | 9 | <div class="pull-right"> |
10 | <a href="javascript:answer('{{ post.id }}', '{% url 'course:forum:reply_post' %}');"> | 10 | <a href="javascript:answer('{{ post.id }}', '{% url 'course:forum:reply_post' %}');"> |
11 | - <i class="material-icons">reply</i> | 11 | + <i class="material-icons">{% trans 'reply' %}</i> |
12 | </a> | 12 | </a> |
13 | {% if request.user|has_role:'system_admin' or request.user == post.user %} | 13 | {% if request.user|has_role:'system_admin' or request.user == post.user %} |
14 | {% csrf_token %} | 14 | {% csrf_token %} |
@@ -0,0 +1,50 @@ | @@ -0,0 +1,50 @@ | ||
1 | +BBBB BBBB BBBBBBBBBBBBBBB BBBBBBBBBBBBBBBB | ||
2 | + | ||
3 | +BB BBBBBBBBBBBB B B | ||
4 | + BBB BBBB BB BBBBB | ||
5 | + XXXX XXXXXXXXXX XXXXXXXX | ||
6 | + XXXX XXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXX | ||
7 | + XXX XXXXXXXXXXXXXXXXXX | ||
8 | + | ||
9 | + XXXX XXXXXXXXXXXXXXXXXXX | ||
10 | + XX XXXXXXXXXXXXXXXXXXXXXXXXXXX XBBB BBBBBBBBBBBBBBBBBBBBBBBBBXXXXX | ||
11 | + XX XXXXXXXXXXXXXXXXXXXXXXX gettext(u'reply') XXXX | ||
12 | + XXXX | ||
13 | + BB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BB BBBBBBBBBBBB BB BBBBBBBBB | ||
14 | + BBBBBBBBBB | ||
15 | + XXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX | ||
16 | + XX XXXXXXXXXX XXXXXXXXXXX XXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXX | ||
17 | + XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | ||
18 | + XXXX | ||
19 | + XXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | ||
20 | + XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXBBB BBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBXX XXX X gettext(u'Post edited successfully!') XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX gettext(u'Edit') XXXXXXXXX | ||
21 | + XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXBBB BBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBXX XXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX gettext(u'Remove') XXXXXXXXX | ||
22 | + XXXXX | ||
23 | + XXXXXX | ||
24 | + BBBBB | ||
25 | + XXXXXX | ||
26 | + XXXXX | ||
27 | + XXXX XXXXXXXXXXXXXXXXXXXXX | ||
28 | + XXXX XXXXXXXXXXXXXXXXXX | ||
29 | + XX XXXXXXXXXXXXXXXXXXXXX | ||
30 | + XX XXXXXXXXX XXXXXXXXXXXXXXXX FFFFFFFFF gettext(u'ago') | ||
31 | + BB BBBBBBBBBBBBBBBB | ||
32 | + XXXX X gettext(u'Edited') XXXXX | ||
33 | + BBBBB | ||
34 | + XXXX | ||
35 | + XXXXXX | ||
36 | + XX XXXXXXXXXXXXXXXXXXXXXFFFFFFFFFFXXXX | ||
37 | + XXXXXX | ||
38 | + XXXX XXXXXXXXXXXXXXXXXXXXXXXXXX | ||
39 | + XXXX XXXXXXXXXXXXXXXXXXXX | ||
40 | + BBBBBBBBBBBBBBBB BBBBBBB BBBB | ||
41 | + XXXXXX | ||
42 | + XXXX XXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXX XXXXXX | ||
43 | + XXXXXXXX | ||
44 | + XXXXX XXXXXXXXX XXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX | ||
45 | + XXXXXXXXX | ||
46 | + XXXXXX | ||
47 | + XXXXXX | ||
48 | + XXXXXX | ||
49 | + BBBBBB | ||
50 | +BBBBB | ||
0 | \ No newline at end of file | 51 | \ No newline at end of file |
forum/templates/post/post_render.html
@@ -6,7 +6,7 @@ | @@ -6,7 +6,7 @@ | ||
6 | {{ post.user }} | 6 | {{ post.user }} |
7 | <div class="pull-right"> | 7 | <div class="pull-right"> |
8 | <a href="javascript:answer('{{ post.id }}', '{% url 'course:forum:reply_post' %}');"> | 8 | <a href="javascript:answer('{{ post.id }}', '{% url 'course:forum:reply_post' %}');"> |
9 | - <i class="material-icons">reply</i> | 9 | + <i class="material-icons">{% trans 'reply' %}</i> |
10 | </a> | 10 | </a> |
11 | {% if request.user|has_role:'system_admin' or request.user|has_role:'professor' and request.user == post.user %} | 11 | {% if request.user|has_role:'system_admin' or request.user|has_role:'professor' and request.user == post.user %} |
12 | {% csrf_token %} | 12 | {% csrf_token %} |
forum/templates/post/post_render.html.py
1 | BBBB BBBB BBBBBBBBBBBBBBB BBBBBBBBBBBBBBBB | 1 | BBBB BBBB BBBBBBBBBBBBBBB BBBBBBBBBBBBBBBB |
2 | 2 | ||
3 | -XXXX XXXXXXXXXXXX | 3 | +XXXX XXXXXXXXXX XXXXXXXXXX |
4 | XXXX XXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXX | 4 | XXXX XXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXX |
5 | XXX XXXXXXXXXXXXXXXXXX | 5 | XXX XXXXXXXXXXXXXXXXXX |
6 | 6 | ||
7 | XXXX XXXXXXXXXXXXXXXXXXX | 7 | XXXX XXXXXXXXXXXXXXXXXXX |
8 | XX XXXXXXXXXXXXXXXXXXXXXXXXXXX XBBB BBBBBBBBBBBBBBBBBBBBBBBBBXXXXX | 8 | XX XXXXXXXXXXXXXXXXXXXXXXXXXXX XBBB BBBBBBBBBBBBBBBBBBBBBBBBBXXXXX |
9 | - XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 9 | + XX XXXXXXXXXXXXXXXXXXXXXXX gettext(u'reply') XXXX |
10 | XXXX | 10 | XXXX |
11 | BB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBB BBBBBBBBBBBB BB BBBBBBBBB | 11 | BB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBB BBBBBBBBBBBB BB BBBBBBBBB |
12 | BBBBBBBBBB | 12 | BBBBBBBBBB |
@@ -15,7 +15,7 @@ XXXX XXXXXXXXXXXX | @@ -15,7 +15,7 @@ XXXX XXXXXXXXXXXX | ||
15 | XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 15 | XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
16 | XXXX | 16 | XXXX |
17 | XXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 17 | XXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
18 | - XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXBBB BBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBXX XXX X gettext(u'Post edited successfully!') XXXXXXXXX | 18 | + XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXBBB BBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBXX XXX X gettext(u'Post edited successfully!') XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX gettext(u'Edit') XXXXXXXXX |
19 | XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXBBB BBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBXX XXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX gettext(u'Remove') XXXXXXXXX | 19 | XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXBBB BBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBXX XXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX gettext(u'Remove') XXXXXXXXX |
20 | XXXXX | 20 | XXXXX |
21 | XXXXXX | 21 | XXXXXX |
@@ -26,7 +26,7 @@ XXXX XXXXXXXXXXXX | @@ -26,7 +26,7 @@ XXXX XXXXXXXXXXXX | ||
26 | XXXX XXXXXXXXXXXXXXXXXX | 26 | XXXX XXXXXXXXXXXXXXXXXX |
27 | XX XXXXXXXXXXXXXXXXXXXXX | 27 | XX XXXXXXXXXXXXXXXXXXXXX |
28 | XX XXXXXXXXX XXXXXXXXXXXXXXXX FFFFFFFFF gettext(u'ago') | 28 | XX XXXXXXXXX XXXXXXXXXXXXXXXX FFFFFFFFF gettext(u'ago') |
29 | - BB BBBBBBBBBBBBBB BB BBBBBBBBBBBBBBBBBBBBB | 29 | + BB BBBBBBBBBBBBBBBB |
30 | XXXX X gettext(u'Edited') XXXXX | 30 | XXXX X gettext(u'Edited') XXXXX |
31 | BBBBB | 31 | BBBBB |
32 | XXXX | 32 | XXXX |
forum/templates/post_answers/post_answer_form.html
@@ -35,7 +35,7 @@ | @@ -35,7 +35,7 @@ | ||
35 | {% else %} | 35 | {% else %} |
36 | <span class="input-group-btn"> | 36 | <span class="input-group-btn"> |
37 | <button type="submit" class="btn btn-fab btn-fab-mini"> | 37 | <button type="submit" class="btn btn-fab btn-fab-mini"> |
38 | - <i class="material-icons">send</i> | 38 | + <i class="material-icons">{% trans 'send' %}</i> |
39 | </button> | 39 | </button> |
40 | </span> | 40 | </span> |
41 | {% endif %} | 41 | {% endif %} |
forum/templates/post_answers/post_answer_form.html.py
@@ -35,7 +35,7 @@ XXXXX XXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXBB BBBBBBBBB BBBBBBBBBBBBBB | @@ -35,7 +35,7 @@ XXXXX XXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXBB BBBBBBBBB BBBBBBBBBBBBBB | ||
35 | BBBB | 35 | BBBB |
36 | XXXXX XXXXXXXXXXXXXXXXXXXXXXXX | 36 | XXXXX XXXXXXXXXXXXXXXXXXXXXXXX |
37 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXX XXXXXXXXXXXXXX | 37 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXX XXXXXXXXXXXXXX |
38 | - XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 38 | + XX XXXXXXXXXXXXXXXXXXXXXXX gettext(u'send') XXXX |
39 | XXXXXXXXX | 39 | XXXXXXXXX |
40 | XXXXXXX | 40 | XXXXXXX |
41 | BBBBB | 41 | BBBBB |
forum/templates/post_answers/post_answer_load_more_render.html.py
0 → 100644
@@ -0,0 +1,38 @@ | @@ -0,0 +1,38 @@ | ||
1 | +BBBB BBBB BBBBBBBBBBBBBBB | ||
2 | + | ||
3 | +BB BBBBBBBBBBBBBB B B | ||
4 | + BBB BBBBBB BB BBBBBBB | ||
5 | + XXXX XXXXXXXXXXXXXXX | ||
6 | + XXXX XXXXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXX | ||
7 | + XXXX XXXXXXXXXXXXXXXX XXXXXXXXXXX | ||
8 | + XXX XXXXXXXXXXXXXXXXXX | ||
9 | + | ||
10 | + BB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BB BBBBBBBBBBBB BB BBBBBBBBBBB | ||
11 | + XXXX XXXXXXXXXXXXXXXXXXX | ||
12 | + XXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX | ||
13 | + XX XXXXXXXXXX XXXXXXXXXXX XXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXX | ||
14 | + XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | ||
15 | + XXXX | ||
16 | + XXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | ||
17 | + XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBXX XXX X gettext(u'Answer edited sucessfully!') XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX gettext(u'Edit') XXXXXXXXX | ||
18 | + XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBXX XXX X gettext(u'Are you sure you want to delete this answer?') XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX gettext(u'Remove') XXXXXXXXX | ||
19 | + XXXXX | ||
20 | + XXXXXX | ||
21 | + XXXXXX | ||
22 | + BBBBB | ||
23 | + XXXXX | ||
24 | + XXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX | ||
25 | + XXXX XXXXXXXXXXXXXXXXXX | ||
26 | + XX XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXX XXXXXXXXXXXXXXXX FFFFFFFFF gettext(u'ago') | ||
27 | + BB BBBBBBBBBBBBBBBBBB | ||
28 | + XXXX X gettext(u'Edited') XXXXX | ||
29 | + BBBBB | ||
30 | + XXXX | ||
31 | + XXXXXX | ||
32 | + XX XXXXXXXXXXXXXXXXXXXXXFFFFFFFFFFXXXX | ||
33 | + XXXXXX | ||
34 | + XXXXXX | ||
35 | + XXXXXX | ||
36 | + XXXXXX | ||
37 | + BBBBBB | ||
38 | +BBBBB | ||
0 | \ No newline at end of file | 39 | \ No newline at end of file |
forum/templates/post_answers/post_answer_render.html.py
1 | BBBB BBBB BBBBBBBBBBBBBBB | 1 | BBBB BBBB BBBBBBBBBBBBBBB |
2 | 2 | ||
3 | -XXXXX | 3 | +XXXX XXXXXXXXXXXXXXXXXXX |
4 | XXXX XXXXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXX | 4 | XXXX XXXXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXX |
5 | XXXX XXXXXXXXXXXXXXXX XXXXXXXXXXX | 5 | XXXX XXXXXXXXXXXXXXXX XXXXXXXXXXX |
6 | XXX XXXXXXXXXXXXXXXXXX | 6 | XXX XXXXXXXXXXXXXXXXXX |
forum/tests/test_model_answer.py
@@ -36,7 +36,6 @@ class PostAnswerTestCase (TestCase): | @@ -36,7 +36,6 @@ class PostAnswerTestCase (TestCase): | ||
36 | 36 | ||
37 | self.course = Course.objects.create( | 37 | self.course = Course.objects.create( |
38 | name = 'Curso Teste', | 38 | name = 'Curso Teste', |
39 | - slug = 'curso_teste', | ||
40 | max_students = 50, | 39 | max_students = 50, |
41 | init_register_date = '2016-08-26', | 40 | init_register_date = '2016-08-26', |
42 | end_register_date = '2016-10-01', | 41 | end_register_date = '2016-10-01', |
forum/tests/test_model_forum.py
@@ -37,7 +37,6 @@ class ForumTestCase (TestCase): | @@ -37,7 +37,6 @@ class ForumTestCase (TestCase): | ||
37 | 37 | ||
38 | self.course = Course.objects.create( | 38 | self.course = Course.objects.create( |
39 | name = 'Curso Teste', | 39 | name = 'Curso Teste', |
40 | - slug = 'curso_teste', | ||
41 | max_students = 50, | 40 | max_students = 50, |
42 | init_register_date = '2016-08-26', | 41 | init_register_date = '2016-08-26', |
43 | end_register_date = '2016-10-01', | 42 | end_register_date = '2016-10-01', |
forum/tests/test_model_post.py
@@ -36,7 +36,6 @@ class PostTestCase (TestCase): | @@ -36,7 +36,6 @@ class PostTestCase (TestCase): | ||
36 | 36 | ||
37 | self.course = Course.objects.create( | 37 | self.course = Course.objects.create( |
38 | name = 'Curso Teste', | 38 | name = 'Curso Teste', |
39 | - slug = 'curso_teste', | ||
40 | max_students = 50, | 39 | max_students = 50, |
41 | init_register_date = '2016-08-26', | 40 | init_register_date = '2016-08-26', |
42 | end_register_date = '2016-10-01', | 41 | end_register_date = '2016-10-01', |
forum/tests/test_view_forum.py
@@ -42,13 +42,11 @@ class ForumViewTestCase (TestCase): | @@ -42,13 +42,11 @@ class ForumViewTestCase (TestCase): | ||
42 | 42 | ||
43 | self.category = CourseCategory.objects.create( | 43 | self.category = CourseCategory.objects.create( |
44 | name = 'Category test', | 44 | name = 'Category test', |
45 | - slug = 'category_test' | ||
46 | ) | 45 | ) |
47 | self.category.save() | 46 | self.category.save() |
48 | 47 | ||
49 | self.course = Course.objects.create( | 48 | self.course = Course.objects.create( |
50 | name = 'Course Test', | 49 | name = 'Course Test', |
51 | - slug = 'course_test', | ||
52 | max_students = 50, | 50 | max_students = 50, |
53 | init_register_date = '2016-08-26', | 51 | init_register_date = '2016-08-26', |
54 | end_register_date = '2016-10-01', | 52 | end_register_date = '2016-10-01', |
@@ -60,7 +58,6 @@ class ForumViewTestCase (TestCase): | @@ -60,7 +58,6 @@ class ForumViewTestCase (TestCase): | ||
60 | 58 | ||
61 | self.subject = Subject.objects.create( | 59 | self.subject = Subject.objects.create( |
62 | name = 'Subject Test', | 60 | name = 'Subject Test', |
63 | - slug='subject-test', | ||
64 | description = "description of the subject test", | 61 | description = "description of the subject test", |
65 | visible = True, | 62 | visible = True, |
66 | course = self.course, | 63 | course = self.course, |
@@ -80,7 +77,6 @@ class ForumViewTestCase (TestCase): | @@ -80,7 +77,6 @@ class ForumViewTestCase (TestCase): | ||
80 | self.forum = Forum.objects.create( | 77 | self.forum = Forum.objects.create( |
81 | topic=self.topic, | 78 | topic=self.topic, |
82 | name = 'forum test', | 79 | name = 'forum test', |
83 | - slug='forum-test', | ||
84 | description = 'description of the forum test', | 80 | description = 'description of the forum test', |
85 | create_date = '2016-10-02', | 81 | create_date = '2016-10-02', |
86 | modification_date = '2016-10-03', | 82 | modification_date = '2016-10-03', |
@@ -124,22 +120,16 @@ class ForumViewTestCase (TestCase): | @@ -124,22 +120,16 @@ class ForumViewTestCase (TestCase): | ||
124 | self.assertEquals(response.status_code, 200) | 120 | self.assertEquals(response.status_code, 200) |
125 | 121 | ||
126 | response = self.client_professor.get(url) | 122 | response = self.client_professor.get(url) |
127 | - self.assertEquals(response.status_code, 200) | 123 | + self.assertEquals(response.status_code, 302) |
128 | 124 | ||
129 | response = self.client_student.get(url) | 125 | response = self.client_student.get(url) |
130 | - self.assertEquals(response.status_code, 200) | 126 | + self.assertEquals(response.status_code, 302) |
131 | 127 | ||
132 | def test_ForumDetail_context(self): | 128 | def test_ForumDetail_context(self): |
133 | url = reverse('course:forum:view', kwargs={'slug':self.forum.slug}) | 129 | url = reverse('course:forum:view', kwargs={'slug':self.forum.slug}) |
134 | 130 | ||
135 | response = self.client.get(url) | 131 | response = self.client.get(url) |
136 | - self.assertTrue('forum' in response.context) | ||
137 | - | ||
138 | - response = self.client_professor.get(url) | ||
139 | - self.assertTrue('forum' in response.context) | ||
140 | - | ||
141 | - response = self.client_student.get(url) | ||
142 | - self.assertTrue('forum' in response.context) | 132 | + self.assertTrue('form' in response.context) |
143 | 133 | ||
144 | 134 | ||
145 | ######################### CreateForumView ######################### | 135 | ######################### CreateForumView ######################### |
@@ -180,7 +170,7 @@ class ForumViewTestCase (TestCase): | @@ -180,7 +170,7 @@ class ForumViewTestCase (TestCase): | ||
180 | self.assertEquals(list_forum, Forum.objects.all().count()) | 170 | self.assertEquals(list_forum, Forum.objects.all().count()) |
181 | 171 | ||
182 | response = self.client_student.post(url, data) | 172 | response = self.client_student.post(url, data) |
183 | - self.assertEquals (response.status_code, 400) | 173 | + self.assertEquals (response.status_code, 403) |
184 | self.assertEquals(list_forum, Forum.objects.all().count()) | 174 | self.assertEquals(list_forum, Forum.objects.all().count()) |
185 | 175 | ||
186 | def test_CreateForum_form_ok (self): | 176 | def test_CreateForum_form_ok (self): |
@@ -214,20 +204,7 @@ class ForumViewTestCase (TestCase): | @@ -214,20 +204,7 @@ class ForumViewTestCase (TestCase): | ||
214 | self.assertEquals(response.status_code, 200) | 204 | self.assertEquals(response.status_code, 200) |
215 | 205 | ||
216 | response = self.client_professor.get(url) | 206 | response = self.client_professor.get(url) |
217 | - self.assertEquals(response.status_code, 200) | ||
218 | - | ||
219 | - #response = self.client_student.get(url) | ||
220 | - #self.assertEquals(response.status_code, 400) | ||
221 | - | ||
222 | - | ||
223 | - def test_UpdateForum_context(self): | ||
224 | - url = reverse('course:forum:update', kwargs={'pk':self.forum.pk}) | ||
225 | - | ||
226 | - response = self.client.get(url) | ||
227 | - self.assertTrue('form' in response.context) | ||
228 | - | ||
229 | - response = self.client_professor.get(url) | ||
230 | - self.assertTrue('form' in response.context) | 207 | + self.assertEquals(response.status_code, 302) |
231 | 208 | ||
232 | 209 | ||
233 | def test_UpdateForum_form_error (self): | 210 | def test_UpdateForum_form_error (self): |
@@ -238,10 +215,10 @@ class ForumViewTestCase (TestCase): | @@ -238,10 +215,10 @@ class ForumViewTestCase (TestCase): | ||
238 | self.assertEquals (response.status_code, 400) | 215 | self.assertEquals (response.status_code, 400) |
239 | 216 | ||
240 | response = self.client_professor.post(url, data) | 217 | response = self.client_professor.post(url, data) |
241 | - self.assertEquals (response.status_code, 400) | 218 | + self.assertEquals (response.status_code, 302) |
242 | 219 | ||
243 | response = self.client_student.post(url, data) | 220 | response = self.client_student.post(url, data) |
244 | - self.assertEquals (response.status_code, 400) | 221 | + self.assertEquals (response.status_code, 302) |
245 | 222 | ||
246 | def test_UpdateForum_form_ok (self): | 223 | def test_UpdateForum_form_ok (self): |
247 | url = reverse('course:forum:update', kwargs={'pk':self.forum.pk}) | 224 | url = reverse('course:forum:update', kwargs={'pk':self.forum.pk}) |
@@ -260,16 +237,16 @@ class ForumViewTestCase (TestCase): | @@ -260,16 +237,16 @@ class ForumViewTestCase (TestCase): | ||
260 | 237 | ||
261 | data['name'] = 'Forum Updated as professor' | 238 | data['name'] = 'Forum Updated as professor' |
262 | self.assertEquals(Forum.objects.all()[0].name, 'Forum Updated') | 239 | self.assertEquals(Forum.objects.all()[0].name, 'Forum Updated') |
263 | - response = self.client_professor.post(url, data) | 240 | + response = self.client.post(url, data) |
264 | self.assertEquals (response.status_code, 302) | 241 | self.assertEquals (response.status_code, 302) |
265 | self.assertEquals(Forum.objects.all()[0].name, 'Forum Updated as professor') | 242 | self.assertEquals(Forum.objects.all()[0].name, 'Forum Updated as professor') |
266 | forum = Forum.objects.get(name='Forum Updated as professor') | 243 | forum = Forum.objects.get(name='Forum Updated as professor') |
267 | 244 | ||
268 | - #data['name'] = 'Forum Updated as student' | ||
269 | - #self.assertEquals(Forum.objects.all()[0].name, 'Forum Updated as professor') | ||
270 | - #response = self.client_student.post(url, data) | ||
271 | - #self.assertEquals (response.status_code, 400) | ||
272 | - #self.assertNotEquals(Forum.objects.all()[0].name, 'Forum Updated as student') | 245 | + data['name'] = 'Forum Updated as student' |
246 | + self.assertEquals(Forum.objects.all()[0].name, 'Forum Updated as professor') | ||
247 | + response = self.client_student.post(url, data) | ||
248 | + self.assertEquals (response.status_code, 302) | ||
249 | + self.assertNotEquals(Forum.objects.all()[0].name, 'Forum Updated as student') | ||
273 | forum = Forum.objects.get(name='Forum Updated as professor') | 250 | forum = Forum.objects.get(name='Forum Updated as professor') |
274 | 251 | ||
275 | ######################### CreatePostView ######################### | 252 | ######################### CreatePostView ######################### |
forum/views.py
@@ -9,6 +9,9 @@ from django.http import Http404, JsonResponse | @@ -9,6 +9,9 @@ from django.http import Http404, JsonResponse | ||
9 | from django.urls import reverse | 9 | from django.urls import reverse |
10 | from django.template.loader import render_to_string | 10 | from django.template.loader import render_to_string |
11 | 11 | ||
12 | +from rolepermissions.mixins import HasRoleMixin | ||
13 | +from rolepermissions.verifications import has_object_permission | ||
14 | + | ||
12 | from .models import Forum, Post, PostAnswer | 15 | from .models import Forum, Post, PostAnswer |
13 | from courses.models import Topic | 16 | from courses.models import Topic |
14 | from core.models import Action, Resource | 17 | from core.models import Action, Resource |
@@ -41,7 +44,9 @@ class ForumIndex(LoginRequiredMixin, generic.ListView): | @@ -41,7 +44,9 @@ class ForumIndex(LoginRequiredMixin, generic.ListView): | ||
41 | 44 | ||
42 | return context | 45 | return context |
43 | 46 | ||
44 | -class CreateForumView(LoginRequiredMixin, generic.edit.CreateView, NotificationMixin): | 47 | +class CreateForumView(LoginRequiredMixin, HasRoleMixin, generic.edit.CreateView, NotificationMixin): |
48 | + allowed_roles = ['professor', 'system_admin'] | ||
49 | + | ||
45 | login_url = reverse_lazy("core:home") | 50 | login_url = reverse_lazy("core:home") |
46 | redirect_field_name = 'next' | 51 | redirect_field_name = 'next' |
47 | 52 | ||
@@ -67,9 +72,11 @@ class CreateForumView(LoginRequiredMixin, generic.edit.CreateView, NotificationM | @@ -67,9 +72,11 @@ class CreateForumView(LoginRequiredMixin, generic.edit.CreateView, NotificationM | ||
67 | def render_forum(request, forum): | 72 | def render_forum(request, forum): |
68 | last_forum = get_object_or_404(Forum, id = forum) | 73 | last_forum = get_object_or_404(Forum, id = forum) |
69 | 74 | ||
70 | - return HttpResponse(str(reverse_lazy('course:forum:view', args = (), kwargs = {'slug': last_forum.slug})) + '-' + str(forum) + '-' + str(last_forum.name)) | 75 | + return JsonResponse({'url': str(reverse_lazy('course:forum:view', args = (), kwargs = {'slug': last_forum.slug})), 'forum_id': str(forum), 'name': str(last_forum.name)}) |
76 | + | ||
77 | +class UpdateForumView(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): | ||
78 | + allowed_roles = ['professor', 'system_admin'] | ||
71 | 79 | ||
72 | -class UpdateForumView(LoginRequiredMixin, generic.UpdateView): | ||
73 | login_url = reverse_lazy("core:home") | 80 | login_url = reverse_lazy("core:home") |
74 | redirect_field_name = 'next' | 81 | redirect_field_name = 'next' |
75 | 82 | ||
@@ -77,6 +84,14 @@ class UpdateForumView(LoginRequiredMixin, generic.UpdateView): | @@ -77,6 +84,14 @@ class UpdateForumView(LoginRequiredMixin, generic.UpdateView): | ||
77 | form_class = ForumForm | 84 | form_class = ForumForm |
78 | model = Forum | 85 | model = Forum |
79 | 86 | ||
87 | + def dispatch(self, *args, **kwargs): | ||
88 | + forum = get_object_or_404(Forum, id = self.kwargs.get('pk')) | ||
89 | + | ||
90 | + if(not has_object_permission('edit_forum', self.request.user, forum)): | ||
91 | + return self.handle_no_permission() | ||
92 | + | ||
93 | + return super(UpdateForumView, self).dispatch(*args, **kwargs) | ||
94 | + | ||
80 | def form_invalid(self, form): | 95 | def form_invalid(self, form): |
81 | return self.render_to_response(self.get_context_data(form = form), status = 400) | 96 | return self.render_to_response(self.get_context_data(form = form), status = 400) |
82 | 97 | ||
@@ -93,7 +108,9 @@ def render_edit_forum(request, forum): | @@ -93,7 +108,9 @@ def render_edit_forum(request, forum): | ||
93 | 108 | ||
94 | return render(request, 'forum/render_forum.html', context) | 109 | return render(request, 'forum/render_forum.html', context) |
95 | 110 | ||
96 | -class ForumDeleteView(LoginRequiredMixin, generic.DeleteView): | 111 | +class ForumDeleteView(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): |
112 | + allowed_roles = ['professor', 'system_admin'] | ||
113 | + | ||
97 | login_url = reverse_lazy("core:home") | 114 | login_url = reverse_lazy("core:home") |
98 | redirect_field_name = 'next' | 115 | redirect_field_name = 'next' |
99 | 116 | ||
@@ -101,6 +118,14 @@ class ForumDeleteView(LoginRequiredMixin, generic.DeleteView): | @@ -101,6 +118,14 @@ class ForumDeleteView(LoginRequiredMixin, generic.DeleteView): | ||
101 | pk_url_kwarg = 'pk' | 118 | pk_url_kwarg = 'pk' |
102 | success_url = reverse_lazy('course:forum:deleted_forum') | 119 | success_url = reverse_lazy('course:forum:deleted_forum') |
103 | 120 | ||
121 | + def dispatch(self, *args, **kwargs): | ||
122 | + forum = get_object_or_404(Forum, id = self.kwargs.get('pk')) | ||
123 | + | ||
124 | + if(not has_object_permission('delete_forum', self.request.user, forum)): | ||
125 | + return self.handle_no_permission() | ||
126 | + | ||
127 | + return super(ForumDeleteView, self).dispatch(*args, **kwargs) | ||
128 | + | ||
104 | def forum_deleted(request): | 129 | def forum_deleted(request): |
105 | return HttpResponse(_("Forum deleted successfully.")) | 130 | return HttpResponse(_("Forum deleted successfully.")) |
106 | 131 | ||
@@ -112,6 +137,14 @@ class ForumDetailView(LoginRequiredMixin, generic.DetailView): | @@ -112,6 +137,14 @@ class ForumDetailView(LoginRequiredMixin, generic.DetailView): | ||
112 | template_name = 'forum/forum_view.html' | 137 | template_name = 'forum/forum_view.html' |
113 | context_object_name = 'forum' | 138 | context_object_name = 'forum' |
114 | 139 | ||
140 | + def dispatch(self, *args, **kwargs): | ||
141 | + forum = get_object_or_404(Forum, slug = self.kwargs.get('slug')) | ||
142 | + | ||
143 | + if(not has_object_permission('view_forum', self.request.user, forum)): | ||
144 | + return self.handle_no_permission() | ||
145 | + | ||
146 | + return super(ForumDetailView, self).dispatch(*args, **kwargs) | ||
147 | + | ||
115 | def get_context_data(self, **kwargs): | 148 | def get_context_data(self, **kwargs): |
116 | context = super(ForumDetailView, self).get_context_data(**kwargs) | 149 | context = super(ForumDetailView, self).get_context_data(**kwargs) |
117 | forum = get_object_or_404(Forum, slug = self.kwargs.get('slug')) | 150 | forum = get_object_or_404(Forum, slug = self.kwargs.get('slug')) |
links/admin.py
@@ -3,8 +3,8 @@ from django.contrib import admin | @@ -3,8 +3,8 @@ from django.contrib import admin | ||
3 | from .models import Link | 3 | from .models import Link |
4 | 4 | ||
5 | class LinkAdmin(admin.ModelAdmin): | 5 | class LinkAdmin(admin.ModelAdmin): |
6 | - list_display = ['name', 'link_url','link_description'] | ||
7 | - search_fields = ['name', 'link_url','link_description'] | 6 | + list_display = ['name', 'slug','link_url','link_description'] |
7 | + search_fields = ['name','slug' ,'link_url','link_description'] | ||
8 | 8 | ||
9 | 9 | ||
10 | admin.site.register(Link, LinkAdmin) | 10 | admin.site.register(Link, LinkAdmin) |
links/forms.py
1 | from django import forms | 1 | from django import forms |
2 | from .models import Link | 2 | from .models import Link |
3 | -import validators | 3 | +from django.utils.translation import ugettext_lazy as _ |
4 | +from django.core.exceptions import ValidationError, FieldError | ||
5 | +import requests | ||
4 | 6 | ||
5 | class CreateLinkForm(forms.ModelForm): | 7 | class CreateLinkForm(forms.ModelForm): |
6 | 8 | ||
7 | - def clean_link(self): | 9 | + def clean_link_url(self): |
8 | link_url = self.cleaned_data['link_url'] | 10 | link_url = self.cleaned_data['link_url'] |
9 | - if not validators.url(link_url): | ||
10 | - raise forms.ValidationError(_('Please enter a valid URL')) | 11 | + try: |
12 | + response = requests.head(link_url) | ||
13 | + if response.status_code >= 400: | ||
14 | + raise forms.ValidationError(_('Invalid url!')) | ||
15 | + except requests.ConnectionError: | ||
16 | + raise forms.ValidationError(_('Invalid url!')) | ||
11 | return link_url | 17 | return link_url |
12 | 18 | ||
13 | class Meta: | 19 | class Meta: |
@@ -15,6 +21,15 @@ class CreateLinkForm(forms.ModelForm): | @@ -15,6 +21,15 @@ class CreateLinkForm(forms.ModelForm): | ||
15 | fields = ['name','link_url','link_description'] | 21 | fields = ['name','link_url','link_description'] |
16 | 22 | ||
17 | class UpdateLinkForm(forms.ModelForm): | 23 | class UpdateLinkForm(forms.ModelForm): |
24 | + def clean_link_url(self): | ||
25 | + link_url = self.cleaned_data['link_url'] | ||
26 | + try: | ||
27 | + resposta = requests.head(link_url) | ||
28 | + if resposta.status_code >= 400: | ||
29 | + raise forms.ValidationError(_('Invalid url!')) | ||
30 | + except requests.ConnectionError: | ||
31 | + raise forms.ValidationError(_('Invalid url!')) | ||
32 | + return link_url | ||
18 | class Meta: | 33 | class Meta: |
19 | model = Link | 34 | model = Link |
20 | fields = ['name','link_url','link_description'] | 35 | fields = ['name','link_url','link_description'] |
@@ -0,0 +1,60 @@ | @@ -0,0 +1,60 @@ | ||
1 | +from bs4 import BeautifulSoup | ||
2 | +from urllib.request import urlopen | ||
3 | +import urllib.request | ||
4 | + | ||
5 | +def make_soup(url): | ||
6 | + try: | ||
7 | + html = urlopen(url).read() | ||
8 | + return BeautifulSoup(html,"lxml") | ||
9 | + | ||
10 | + except urllib.error.HTTPError as e: | ||
11 | + return "Use default image" | ||
12 | + | ||
13 | +def get_images(url,slug): | ||
14 | + downloaded = False | ||
15 | + try: | ||
16 | + soup = make_soup(url) | ||
17 | + except: | ||
18 | + return("Use default image",downloaded) | ||
19 | + if soup == None or type(soup) == str: | ||
20 | + return ("Use default image",downloaded) | ||
21 | + images = [img for img in soup.findAll('img')] | ||
22 | + image_links = [each.get('src') for each in images] | ||
23 | + link_slug = slug | ||
24 | + filename = '' | ||
25 | + for each in image_links: | ||
26 | + if downloaded: | ||
27 | + break | ||
28 | + booleano = False | ||
29 | + if each != "": | ||
30 | + if each == None: | ||
31 | + continue | ||
32 | + if 'jpg' in each: | ||
33 | + booleano = True | ||
34 | + pos = each.index("jpg") | ||
35 | + each = each[0:pos+3] | ||
36 | + filename = '.jpg' | ||
37 | + elif 'png' in each: | ||
38 | + booleano = True | ||
39 | + pos = each.index("png") | ||
40 | + each = each[0:pos+3] | ||
41 | + filename = '.png' | ||
42 | + elif 'jpeg' in each: | ||
43 | + booleano = True | ||
44 | + pos = each.index('jpeg') | ||
45 | + each = each[0:pos+4] | ||
46 | + filename = '.jpeg' | ||
47 | + if not booleano: | ||
48 | + continue | ||
49 | + | ||
50 | + if each[0] + each[1] == '//' or each[0] == '/': | ||
51 | + each = 'http:'+each | ||
52 | + if each[0:4] != 'http' and each[0:5] != 'https': | ||
53 | + each = url[0:url.index('/',8)] + each | ||
54 | + caminho = "links/static/images/" | ||
55 | + try: | ||
56 | + urllib.request.urlretrieve(each,"%s"%(caminho)+str(link_slug)+filename) | ||
57 | + downloaded = True | ||
58 | + except Exception: | ||
59 | + continue | ||
60 | + return filename,downloaded |
@@ -0,0 +1,80 @@ | @@ -0,0 +1,80 @@ | ||
1 | +# SOME DESCRIPTIVE TITLE. | ||
2 | +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||
3 | +# This file is distributed under the same license as the PACKAGE package. | ||
4 | +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||
5 | +# | ||
6 | +#, fuzzy | ||
7 | +msgid "" | ||
8 | +msgstr "" | ||
9 | +"Project-Id-Version: PACKAGE VERSION\n" | ||
10 | +"Report-Msgid-Bugs-To: \n" | ||
11 | +"POT-Creation-Date: 2016-10-27 23:54-0300\n" | ||
12 | +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||
13 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||
14 | +"Language-Team: LANGUAGE <LL@li.org>\n" | ||
15 | +"Language: \n" | ||
16 | +"MIME-Version: 1.0\n" | ||
17 | +"Content-Type: text/plain; charset=UTF-8\n" | ||
18 | +"Content-Transfer-Encoding: 8bit\n" | ||
19 | +"Plural-Forms: nplurals=2; plural=(n > 1);\n" | ||
20 | + | ||
21 | +#: .\forms.py:16 .\forms.py:22 | ||
22 | +msgid "Invalid url!" | ||
23 | +msgstr "Url inválida!" | ||
24 | + | ||
25 | +#: .\templates\links\create_link.html:9 | ||
26 | +msgid "Create a New Link" | ||
27 | +msgstr "Criar um novo link" | ||
28 | + | ||
29 | +#: .\templates\links\create_link.html:46 .\templates\links\delete_link.html:15 | ||
30 | +#: .\templates\links\update_link.html:25 | ||
31 | +msgid "Cancel" | ||
32 | +msgstr "Cancelar" | ||
33 | + | ||
34 | +#: .\templates\links\delete_link.html:11 | ||
35 | +msgid "Do you really want to delete this link?" | ||
36 | +msgstr "Você realmente deseja apagar este link?" | ||
37 | + | ||
38 | +#: .\templates\links\delete_link.html:16 | ||
39 | +msgid "Confirm" | ||
40 | +msgstr "Confirmar" | ||
41 | + | ||
42 | +#: .\templates\links\update_link.html:8 | ||
43 | +msgid "Links" | ||
44 | +msgstr "Links" | ||
45 | + | ||
46 | +#: .\templates\links\update_link.html:13 | ||
47 | +msgid "Name" | ||
48 | +msgstr "Nome" | ||
49 | + | ||
50 | +#: .\templates\links\update_link.html:17 | ||
51 | +msgid "URL" | ||
52 | +msgstr "URL" | ||
53 | + | ||
54 | +#: .\templates\links\update_link.html:21 | ||
55 | +msgid "Description" | ||
56 | +msgstr "Descrição" | ||
57 | + | ||
58 | +#: .\templates\links\update_link.html:26 | ||
59 | +msgid "Submit" | ||
60 | +msgstr "Enviar" | ||
61 | + | ||
62 | +#: .\templates\links\view_link.html:8 | ||
63 | +msgid "Link" | ||
64 | +msgstr "Link" | ||
65 | + | ||
66 | +#: .\templates\links\view_link.html:17 | ||
67 | +msgid "Read more" | ||
68 | +msgstr "Ler mais" | ||
69 | + | ||
70 | +#: .\views.py:28 | ||
71 | +msgid "Link created successfully!" | ||
72 | +msgstr "Link criado com sucesso!" | ||
73 | + | ||
74 | +#: .\views.py:50 | ||
75 | +msgid "Link deleted Successfully!" | ||
76 | +msgstr "Link apagado com sucesso!" | ||
77 | + | ||
78 | +#: .\views.py:69 | ||
79 | +msgid "Link updated successfully!" | ||
80 | +msgstr "Link atualizado com sucesso!" |
@@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10 on 2016-10-28 18:34 | ||
3 | +from __future__ import unicode_literals | ||
4 | + | ||
5 | +from django.db import migrations, models | ||
6 | + | ||
7 | + | ||
8 | +class Migration(migrations.Migration): | ||
9 | + | ||
10 | + dependencies = [ | ||
11 | + ('links', '0001_initial'), | ||
12 | + ] | ||
13 | + | ||
14 | + operations = [ | ||
15 | + migrations.AddField( | ||
16 | + model_name='link', | ||
17 | + name='image', | ||
18 | + field=models.ImageField(blank=True, upload_to='links/'), | ||
19 | + ), | ||
20 | + ] |
links/models.py
@@ -5,6 +5,7 @@ from autoslug.fields import AutoSlugField | @@ -5,6 +5,7 @@ from autoslug.fields import AutoSlugField | ||
5 | class Link(Material): | 5 | class Link(Material): |
6 | link_url = models.URLField() | 6 | link_url = models.URLField() |
7 | link_description = models.CharField(max_length=200) | 7 | link_description = models.CharField(max_length=200) |
8 | + image = models.ImageField(upload_to = 'links/',blank = True) | ||
8 | class Meta: | 9 | class Meta: |
9 | verbose_name = 'Link' | 10 | verbose_name = 'Link' |
10 | verbose_name_plural = "Links" | 11 | verbose_name_plural = "Links" |
19.5 KB
links/templates/links/create_link.html
@@ -6,33 +6,35 @@ | @@ -6,33 +6,35 @@ | ||
6 | <div class="modal-content"> | 6 | <div class="modal-content"> |
7 | <div class="modal-header"> | 7 | <div class="modal-header"> |
8 | <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> | 8 | <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> |
9 | - <h4 class="modal-title" id="createLink">Create a New Link</h4> | 9 | + <h4 class="modal-title" id="createLink">{% trans 'Create a New Link' %}</h4> |
10 | </div> | 10 | </div> |
11 | <div class="modal-body"> | 11 | <div class="modal-body"> |
12 | <!-- Card --> | 12 | <!-- Card --> |
13 | <form method="post" action="" id="form-link" enctype="multipart/form-data"> | 13 | <form method="post" action="" id="form-link" enctype="multipart/form-data"> |
14 | {% csrf_token %} | 14 | {% csrf_token %} |
15 | - {% if messages %} | ||
16 | - {% for message in messages %} | ||
17 | - <div class="alert alert-{{ message.tags }} alert-dismissible" role="alert"> | ||
18 | - <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | ||
19 | - <span aria-hidden="true">×</span> | ||
20 | - </button> | ||
21 | - <p>{{ message }}</p> | ||
22 | - </div> | ||
23 | - {% endfor %} | ||
24 | - {% endif %} | ||
25 | {% for field in form %} | 15 | {% for field in form %} |
16 | + <div class ="form-group"> | ||
26 | {% if field.field.required %} | 17 | {% if field.field.required %} |
27 | <label for="{{ field.auto_id }}">{{ field.label }}<span>*</span></label> | 18 | <label for="{{ field.auto_id }}">{{ field.label }}<span>*</span></label> |
28 | - {% else %} | ||
29 | - <label for="{{ field.auto_id }}">{{ field.label }}</label> | ||
30 | {% endif %} | 19 | {% endif %} |
31 | - {% render_field field class='form-control' %} | 20 | + {% render_field field class='form-control input-sm' %} |
21 | + {% if field.errors %} | ||
22 | + <div class="alert alert-danger alert-dismissible clearfix" role="alert"> | ||
23 | + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | ||
24 | + <span aria-hidden="true">×</span> | ||
25 | + </button> | ||
26 | + <ul> | ||
27 | + {% for error in field.errors %} | ||
28 | + <li>{{ error }}</li> | ||
29 | + {% endfor %} | ||
30 | + </ul> | ||
31 | + </div> | ||
32 | + {% endif %} | ||
33 | + </div> | ||
32 | {% endfor %} | 34 | {% endfor %} |
33 | <div class="form-group"> | 35 | <div class="form-group"> |
34 | - <a href="javascript:void(0)" class="btn btn-raised btn-default" data-dismiss="modal">Cancel</a> | ||
35 | - <button class="btn btn-raised btn-primary" type="submit">Submit</button> | 36 | + <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Cancel" %}</button> |
37 | + <button class="btn btn-raised btn-primary" type="submit">{% trans 'Submit' %}</button> | ||
36 | </div> | 38 | </div> |
37 | <!-- .end Card --> | 39 | <!-- .end Card --> |
38 | </div> | 40 | </div> |
@@ -40,29 +42,32 @@ | @@ -40,29 +42,32 @@ | ||
40 | </div> | 42 | </div> |
41 | </div> | 43 | </div> |
42 | <!-- EndModal --> | 44 | <!-- EndModal --> |
43 | - | ||
44 | -{# // <script src="{% static '/links.js' %}"></script> #} | ||
45 | -<script type="text/javascript"> | ||
46 | - $("#form-link").submit(function(event) { | ||
47 | - var data = new FormData($('#form-link').get(0)); | ||
48 | - $.ajax({ | ||
49 | - url: "{% url 'course:links:create_link' topic.slug %}", | ||
50 | - type: $("#form-link").attr('method'), | ||
51 | - data: data, | ||
52 | - cache: false, | ||
53 | - processData: false, | ||
54 | - contentType: false, | ||
55 | - success: function(data) { | ||
56 | - $('#createLinksModal').modal('hide'); | ||
57 | - $('#list-topic{{ topic.id }}-links').append(data); | ||
58 | - $('#list-topic{{ topic.id }}-links-edit').append(data); | ||
59 | - }, | ||
60 | - error: function(data){ | ||
61 | - $('.erro').html(data.responseText); | ||
62 | - $('.modal-backdrop').remove(); | ||
63 | - $('#createLinksModal').modal(); | ||
64 | - } | ||
65 | - }); | ||
66 | - event.preventDefault(); | ||
67 | - }); | ||
68 | -</script> | 45 | +{% block script_link %} |
46 | + {# // <script src="{% static 'js/links.js' %}"></script> #} | ||
47 | + <script type="text/javascript"> | ||
48 | + $("#form-link").submit(function(event) { | ||
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 | + $('#createLinksModal').modal('hide'); | ||
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 | + $('.erro').html(data.responseText); | ||
65 | + $('.modal-backdrop').remove(); | ||
66 | + $('#createLinksModal').modal(); | ||
67 | + alertify.alert('Invalid link, insert a valid one!'); | ||
68 | + } | ||
69 | + }); | ||
70 | + event.preventDefault(); | ||
71 | + }); | ||
72 | + </script> | ||
73 | +{% endblock script_link %} |
links/templates/links/create_link.html.py
@@ -6,12 +6,22 @@ XXXX XXXXXXXXXXXX XXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXX | @@ -6,12 +6,22 @@ XXXX XXXXXXXXXXXX XXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXX | ||
6 | XXXX XXXXXXXXXXXXXXXXXXXXXX | 6 | XXXX XXXXXXXXXXXXXXXXXXXXXX |
7 | XXXX XXXXXXXXXXXXXXXXXXXXX | 7 | XXXX XXXXXXXXXXXXXXXXXXXXX |
8 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 8 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
9 | - XXX XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXX X XXX XXXXXXXXX | 9 | + XXX XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX gettext(u'Create a New Link') XXXXX |
10 | XXXXXX | 10 | XXXXXX |
11 | XXXX XXXXXXXXXXXXXXXXXXX | 11 | XXXX XXXXXXXXXXXXXXXXXXX |
12 | XXXX XXXX XXX | 12 | XXXX XXXX XXX |
13 | XXXXX XXXXXXXXXXXXX XXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 13 | XXXXX XXXXXXXXXXXXX XXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
14 | BBBBBBBBBB | 14 | BBBBBBBBBB |
15 | + BB BBBBBBBB | ||
16 | + BBB BBBBBBB BB BBBBBBBB | ||
17 | + XXXX XXXXXXXXXXXX XXXXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX | ||
18 | + XXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXX | ||
19 | + XXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | ||
20 | + XXXXXXXXX | ||
21 | + XXXXXXX | ||
22 | + XXXXXX | ||
23 | + BBBBBB | ||
24 | + BBBBB | ||
15 | BBB BBBBB BB BBBB | 25 | BBB BBBBB BB BBBB |
16 | BB BBBBBBBBBBBBBBBBBBBB | 26 | BB BBBBBBBBBBBBBBBBBBBB |
17 | XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 27 | XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
@@ -21,8 +31,8 @@ XXXX XXXXXXXXXXXX XXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXX | @@ -21,8 +31,8 @@ XXXX XXXXXXXXXXXX XXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXX | ||
21 | BBBBBBBBBBBB BBBBB BBBBBBBBBBBBBBBBBBBB | 31 | BBBBBBBBBBBB BBBBB BBBBBBBBBBBBBBBBBBBB |
22 | BBBBBB | 32 | BBBBBB |
23 | XXXX XXXXXXXXXXXXXXXXXXX | 33 | XXXX XXXXXXXXXXXXXXXXXXX |
24 | - XX XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | ||
25 | - XXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 34 | + XX XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX gettext(u'Cancel') XXXX |
35 | + XXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXX XXXXXXXX XXXXXXXXXXX | ||
26 | XXXXXX | 36 | XXXXXX |
27 | XXXX XXXX XXXX XXX | 37 | XXXX XXXX XXXX XXX |
28 | XXXXXX | 38 | XXXXXX |
links/templates/links/delete_link.html
1 | -<!-- MODAL REMOVE LINK --> | ||
2 | -<div class="modal" id="removeLink"> | ||
3 | - <div class="modal-dialog"> | ||
4 | - <div class="modal-content"> | ||
5 | - <div class="modal-header"> | ||
6 | - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">X</button> | ||
7 | - <h4 class="modal-title"></h4> | ||
8 | - </div> | ||
9 | - <div class="modal-body"> | ||
10 | - <p>Do you really want to delete this link?</p> | ||
11 | - </div> | ||
12 | - <div class="modal-footer"> | ||
13 | - <!-- --> | ||
14 | - <button type="button" class="btn btn-primary btn-default" data-dismiss="modal">Cancel</button> | ||
15 | - <a href="http://www.google.com" target="_self"><button type="button" class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Confirm</button></a> | 1 | +{% load static widget_tweaks i18n %} |
16 | 2 | ||
17 | - </div> | 3 | +<!-- MODAL DELETE LINK --> |
4 | +<link rel="stylesheet" type="text/css" href="{% static 'css/link.css' %}"> | ||
5 | + | ||
6 | +<div class="erro-update"> | ||
7 | + <div class="modal fade" id="linkDeleteModal" tabindex="-1" role="dialog" aria-labelledby="deleteLinkLabel" style="z-index: 10"> | ||
8 | + <div class="modal-dialog" role="document"> | ||
9 | + <div class="modal-content"> | ||
10 | + <div class="modal-header"> | ||
11 | + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> | ||
12 | + <h4 class="modal-title" id="deleteLinkLabel">{% trans 'Delete Link' %}</h4> | ||
13 | + </div> | ||
14 | + <div class="modal-body"> | ||
15 | + <!-- Card --> | ||
16 | + <form class="form-horizontal" method="post" id="form-delete-link" enctype="multipart/form-data"> | ||
17 | + {% csrf_token %} | ||
18 | + <fieldset> | ||
19 | + <div class="col-md-12"> | ||
20 | + {% trans "Are you sure to delete the link " %} <strong>"{{ link.name }}"</strong> </a> of {{ link.topic.name }}? | ||
21 | + </div> | ||
22 | + <div class="form-group"> | ||
23 | + <div class="col-md-12"> | ||
24 | + <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Close" %}</button> | ||
25 | + <button class="btn btn-raised btn-primary" type="submit">{% trans 'Delete' %}</button> | ||
26 | + </div> | ||
27 | + </div> | ||
28 | + </fieldset> | ||
29 | + </form> | ||
30 | + <!-- .end Card --> | ||
31 | + </div> | ||
32 | + </div> | ||
33 | + </div> | ||
18 | </div> | 34 | </div> |
19 | - </div> | ||
20 | </div> | 35 | </div> |
21 | -<!-- END --> | 36 | + |
37 | +{% block script_link %} | ||
38 | + | ||
39 | + {# // <script src="{% static 'js/link.js' %}"></script> #} | ||
40 | + <script type="text/javascript"> | ||
41 | + $("#form-delete-link").submit(function(event) { | ||
42 | + var data = new FormData($('#form-delete-link').get(0)); | ||
43 | + $.ajax({ | ||
44 | + url: "{% url 'course:links:delete_link' link.slug %}", | ||
45 | + type: $("#form-delete-link").attr('method'), | ||
46 | + data: data, | ||
47 | + cache: false, | ||
48 | + processData: false, | ||
49 | + contentType: false, | ||
50 | + success: function(data) { | ||
51 | + $('#linkDeleteModal').modal('hide'); | ||
52 | + $('#link_{{ link.slug }}').remove(); | ||
53 | + $('#link_edit_icon_{{ link.slug }}').remove(); | ||
54 | + $('#link_edit_{{ link.slug }}').remove(); | ||
55 | + alertify.alert('Link successfully deleted!') | ||
56 | + }, | ||
57 | + error: function(data){ | ||
58 | + // $('.erro-update').html(data.responseText); | ||
59 | + $('.modal-backdrop').remove(); | ||
60 | + $('#linkDeteleModal').modal(); | ||
61 | + alertify.alert('Error when trying to delete.'); | ||
62 | + } | ||
63 | + }); | ||
64 | + event.preventDefault(); | ||
65 | + }); | ||
66 | + </script> | ||
67 | +{% endblock script_link %} | ||
68 | +<!-- EndModal --> |
links/templates/links/delete_link.html.py
1 | +BBBB BBBBBBBBBBBBB BBBB | ||
1 | XXXX XXXXX XXXXXX XXXX XXX | 2 | XXXX XXXXX XXXXXX XXXX XXX |
2 | XXXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXX | 3 | XXXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXX |
3 | XXXX XXXXXXXXXXXXXXXXXXXXX | 4 | XXXX XXXXXXXXXXXXXXXXXXXXX |
@@ -7,12 +8,12 @@ XXXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXX | @@ -7,12 +8,12 @@ XXXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXX | ||
7 | XXX XXXXXXXXXXXXXXXXXXXXXXXXX | 8 | XXX XXXXXXXXXXXXXXXXXXXXXXXXX |
8 | XXXXXX | 9 | XXXXXX |
9 | XXXX XXXXXXXXXXXXXXXXXXX | 10 | XXXX XXXXXXXXXXXXXXXXXXX |
10 | - XXXXX XXX XXXXXX XXXX XX XXXXXX XXXX XXXXXXXXX | 11 | + XXX gettext(u'Do you really want to delete this link?') XXXX |
11 | XXXXXX | 12 | XXXXXX |
12 | XXXX XXXXXXXXXXXXXXXXXXXXX | 13 | XXXX XXXXXXXXXXXXXXXXXXXXX |
13 | XXXX XXX | 14 | XXXX XXX |
14 | - XXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | ||
15 | - XX XXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 15 | + XXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX gettext(u'Cancel') XXXXXXXXX |
16 | + XX XXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXX gettext(u'Confirm') XXXXXXXXXXXXX | ||
16 | 17 | ||
17 | XXXXXX | 18 | XXXXXX |
18 | XXXXXX | 19 | XXXXXX |
links/templates/links/render_link.html
1 | -<li><i class="fa fa-link" aria-hidden="true"></i> <a href="javascript:get_modal_link('{% url 'course:links:view_link' link.slug %}', '#viewLinkModal','#divModalLink')">{{link}}</a></li> | 1 | +<li id="link_{{ link.slug }}"><i class="fa fa-link" aria-hidden="true"></i> <a href="javascript:get_modal_link('{% url 'course:links:view_link' link.slug %}', '#viewLinkModal','#divModalLink')">{{link.name}}</a></li> |
links/templates/links/update_link.html
1 | +{% load widget_tweaks i18n %} | ||
1 | <!-- MODAL LINK EDIT--> | 2 | <!-- MODAL LINK EDIT--> |
2 | <div class="modal fade" id="linksModalEdit" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> | 3 | <div class="modal fade" id="linksModalEdit" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> |
3 | <div class="modal-dialog" role="document"> | 4 | <div class="modal-dialog" role="document"> |
4 | <div class="modal-content"> | 5 | <div class="modal-content"> |
5 | <div class="modal-header"> | 6 | <div class="modal-header"> |
6 | <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> | 7 | <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> |
7 | - <h4 class="modal-title" id="myModalLabel">Links</h4> | 8 | + <h4 class="modal-title" id="myModalLabel">{% trans 'Edit Link' %}</h4> |
8 | </div> | 9 | </div> |
9 | <div class="modal-body"> | 10 | <div class="modal-body"> |
10 | <!-- Card --> | 11 | <!-- Card --> |
12 | + <form class="form-horizontal" method="post" id="form-update-link" enctype="multipart/form-data"> | ||
13 | + {% csrf_token %} | ||
14 | + {% for field in form %} | ||
15 | + <div class="form-group is-empty"> | ||
16 | + <div class="col-md-12"> | ||
17 | + {% if field.field.required %} | ||
18 | + <label for="{{ field.auto_id }}" class="control-label">{{ field.label }}<span>*</span></label> | ||
19 | + {% else %} | ||
20 | + <label for="{{ field.auto_id }}" class=" control-label">{{ field.label }}</label> | ||
21 | + {% endif %} | ||
22 | + {% render_field field class='form-control input-sm' %} | ||
23 | + </div> | ||
24 | + </div> | ||
25 | + {% if field.errors %} | ||
26 | + <div class="alert alert-danger alert-dismissible clearfix" role="alert"> | ||
27 | + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | ||
28 | + <span aria-hidden="true">×</span> | ||
29 | + </button> | ||
30 | + <ul> | ||
31 | + {% for error in field.errors %} | ||
32 | + <li>{{ error }}</li> | ||
33 | + {% endfor %} | ||
34 | + </ul> | ||
35 | + </div> | ||
36 | + {% endif %} | ||
37 | + {% endfor %} | ||
11 | <div class="form-group"> | 38 | <div class="form-group"> |
12 | - <label class="control-label" for="inputDefault">Name</label> | ||
13 | - <input value="Python" type="text" class="form-control" id="inputDefault"> | 39 | + <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Cancel" %}</button> |
40 | + <button class="btn btn-raised btn-primary" type="submit">{% trans 'Submit' %}</button> | ||
14 | </div> | 41 | </div> |
15 | - <div class="form-group"> | ||
16 | - <label class="control-label" for="inputDefault">Url</label> | ||
17 | - <input value="https://www.python.org/" type="text" class="form-control" id="inputDefault"> | ||
18 | - </div> | ||
19 | - <div class="form-group is-empty"> | ||
20 | - <label class="control-label" for="inputDefault">Descrição</label> | ||
21 | - <textarea class="form-control" rows="3"></textarea> | ||
22 | - </div> | ||
23 | - <div class="form-group"> | ||
24 | - <a href="javascript:void(0)" class="btn btn-raised btn-default" data-dismiss="modal">Cancel</a> | ||
25 | - <a href="javascript:void(0)" class="btn btn-raised btn-primary">Submit</a> | ||
26 | - </div> | ||
27 | <!-- .end Card --> | 42 | <!-- .end Card --> |
28 | </div> | 43 | </div> |
29 | </div> | 44 | </div> |
30 | </div> | 45 | </div> |
31 | </div> | 46 | </div> |
32 | <!-- EndModal --> | 47 | <!-- EndModal --> |
48 | +{% block script_link %} | ||
49 | + | ||
50 | + {# // <script src="{% static 'js/links.js' %}"></script> #} | ||
51 | + <script type="text/javascript"> | ||
52 | + $("#form-update-link").submit(function(event) { | ||
53 | + var data = new FormData($('#form-update-link').get(0)); | ||
54 | + $.ajax({ | ||
55 | + url: "{% url 'course:links:update_link' link.slug %}", | ||
56 | + type: $("#form-update-link").attr('method'), | ||
57 | + data: data, | ||
58 | + cache: false, | ||
59 | + processData: false, | ||
60 | + contentType: false, | ||
61 | + success: function(data) { | ||
62 | + $('#linksModalEdit').modal('hide'); | ||
63 | + $('#link_edit_{{ link.slug }}').replaceWith(data); | ||
64 | + $('#link_{{ link.slug }}').replaceWith(data); | ||
65 | + alertify.alert("Sucessfully Updated!") | ||
66 | + }, | ||
67 | + error: function(data){ | ||
68 | + $('.erro-update').html(data.responseText); | ||
69 | + $('.modal-backdrop').remove(); | ||
70 | + $('#linksModalEdit').modal(); | ||
71 | + alertify.alert('Invalid link, insert a valid one!'); | ||
72 | + } | ||
73 | + }); | ||
74 | + event.preventDefault(); | ||
75 | + }); | ||
76 | + </script> | ||
77 | +{% endblock script_link %} |
links/templates/links/update_link.html.py
1 | +BBBB BBBBBBBBBBBBB BBBB | ||
1 | XXXX XXXXX XXXX XXXXXXX | 2 | XXXX XXXXX XXXX XXXXXXX |
2 | XXXX XXXXXXXXXXXX XXXXX XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 3 | XXXX XXXXXXXXXXXX XXXXX XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
3 | XXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX | 4 | XXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX |
4 | XXXX XXXXXXXXXXXXXXXXXXXXXX | 5 | XXXX XXXXXXXXXXXXXXXXXXXXXX |
5 | XXXX XXXXXXXXXXXXXXXXXXXXX | 6 | XXXX XXXXXXXXXXXXXXXXXXXXX |
6 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 7 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
7 | - XXX XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX | 8 | + XXX XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX gettext(u'Links') XXXXX |
8 | XXXXXX | 9 | XXXXXX |
9 | XXXX XXXXXXXXXXXXXXXXXXX | 10 | XXXX XXXXXXXXXXXXXXXXXXX |
10 | XXXX XXXX XXX | 11 | XXXX XXXX XXX |
11 | XXXX XXXXXXXXXXXXXXXXXXX | 12 | XXXX XXXXXXXXXXXXXXXXXXX |
12 | - XXXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 13 | + XXXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXX gettext(u'Name') XXXXXXXX |
13 | XXXXXX XXXXXXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX | 14 | XXXXXX XXXXXXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX |
14 | XXXXXX | 15 | XXXXXX |
15 | XXXX XXXXXXXXXXXXXXXXXXX | 16 | XXXX XXXXXXXXXXXXXXXXXXX |
16 | - XXXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 17 | + XXXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXX gettext(u'URL') XXXXXXXX |
17 | XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX | 18 | XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX |
18 | XXXXXX | 19 | XXXXXX |
19 | XXXX XXXXXXXXXXXXXXXXX XXXXXXXXXX | 20 | XXXX XXXXXXXXXXXXXXXXX XXXXXXXXXX |
20 | - XXXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 21 | + XXXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXX gettext(u'Descrição') XXXXXXXX |
21 | XXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX | 22 | XXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX |
22 | XXXXXX | 23 | XXXXXX |
23 | XXXX XXXXXXXXXXXXXXXXXXX | 24 | XXXX XXXXXXXXXXXXXXXXXXX |
24 | - XX XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | ||
25 | - XX XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX | 25 | + XX XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX gettext(u'Cancel') XXXX |
26 | + XX XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXXX gettext(u'Submit') XXXX | ||
26 | XXXXXX | 27 | XXXXXX |
27 | XXXX XXXX XXXX XXX | 28 | XXXX XXXX XXXX XXX |
28 | XXXXXX | 29 | XXXXXX |
links/templates/links/view_link.html
@@ -5,16 +5,16 @@ | @@ -5,16 +5,16 @@ | ||
5 | <div class="modal-content"> | 5 | <div class="modal-content"> |
6 | <div class="modal-header"> | 6 | <div class="modal-header"> |
7 | <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> | 7 | <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> |
8 | - <h4 class="modal-title" id="myModalLabel">Link</h4> | 8 | + <h4 class="modal-title" id="myModalLabel">{% trans 'Link' %}</h4> |
9 | </div> | 9 | </div> |
10 | <div class="modal-body"> | 10 | <div class="modal-body"> |
11 | <!-- Card --> | 11 | <!-- Card --> |
12 | <article class="card animated fadeInLeft"> | 12 | <article class="card animated fadeInLeft"> |
13 | - <img class="card-img-top img-responsive" src="https://www.python.org/static/opengraph-icon-200x200.png" align="left"> | 13 | + <img class="card-img-top img-responsive" src="{{ link.image.url}}" width="200" height="200" align="left"> |
14 | <div class="card-block"> | 14 | <div class="card-block"> |
15 | <b class="card-title">{{link.name}}</b><p></p> | 15 | <b class="card-title">{{link.name}}</b><p></p> |
16 | <p class="card-text"> </p><p>{{link.link_description}}</p> | 16 | <p class="card-text"> </p><p>{{link.link_description}}</p> |
17 | - <a href="{{ link.link_url }}" class="btn btn-primary">Read more</a> | 17 | + <a href="{{ link.link_url }}" class="btn btn-primary">{% trans 'Read more' %}</a> |
18 | </div> | 18 | </div> |
19 | </article> | 19 | </article> |
20 | <!-- .end Card --> | 20 | <!-- .end Card --> |
links/templates/links/view_link.html.py
@@ -5,7 +5,7 @@ XXXX XXXXXXXXXXXX XXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX X | @@ -5,7 +5,7 @@ XXXX XXXXXXXXXXXX XXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX X | ||
5 | XXXX XXXXXXXXXXXXXXXXXXXXXX | 5 | XXXX XXXXXXXXXXXXXXXXXXXXXX |
6 | XXXX XXXXXXXXXXXXXXXXXXXXX | 6 | XXXX XXXXXXXXXXXXXXXXXXXXX |
7 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 7 | XXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
8 | - XXX XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXX | 8 | + XXX XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX gettext(u'Link') XXXXX |
9 | XXXXXX | 9 | XXXXXX |
10 | XXXX XXXXXXXXXXXXXXXXXXX | 10 | XXXX XXXXXXXXXXXXXXXXXXX |
11 | XXXX XXXX XXX | 11 | XXXX XXXX XXX |
@@ -14,7 +14,7 @@ XXXX XXXXXXXXXXXX XXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX X | @@ -14,7 +14,7 @@ XXXX XXXXXXXXXXXX XXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX X | ||
14 | XXXX XXXXXXXXXXXXXXXXXXX | 14 | XXXX XXXXXXXXXXXXXXXXXXX |
15 | XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 15 | XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
16 | XX XXXXXXXXXXXXXXXXXX XXXXXXXXXXX | 16 | XX XXXXXXXXXXXXXXXXXX XXXXXXXXXXX |
17 | - XX XXXXXXX XXXXXXXXXX XXXXXXXXXXXXXXXXX XXXXXXXX | 17 | + XX XXXXXXX XXXXXXXXXX XXXXXXXXXXXXX gettext(u'Read more') XXXX |
18 | XXXXXX | 18 | XXXXXX |
19 | XXXXXXXXXX | 19 | XXXXXXXXXX |
20 | XXXX XXXX XXXX XXX | 20 | XXXX XXXX XXXX XXX |
links/tests.py
@@ -154,7 +154,9 @@ class LinkTestCase(TestCase): | @@ -154,7 +154,9 @@ class LinkTestCase(TestCase): | ||
154 | url = reverse('course:links:update_link',kwargs={'slug': self.link.slug}) | 154 | url = reverse('course:links:update_link',kwargs={'slug': self.link.slug}) |
155 | print("slug",self.link.slug) | 155 | print("slug",self.link.slug) |
156 | data = { | 156 | data = { |
157 | + "name" : 'testinglink', | ||
157 | "link_description":'new description', | 158 | "link_description":'new description', |
159 | + "link_url" : 'teste.com', | ||
158 | } | 160 | } |
159 | self.assertEqual(Link.objects.all()[0].link_description, "testdescription") # old description | 161 | self.assertEqual(Link.objects.all()[0].link_description, "testdescription") # old description |
160 | response = self.client.post(url, data) | 162 | response = self.client.post(url, data) |
links/urls.py
@@ -3,8 +3,8 @@ from . import views | @@ -3,8 +3,8 @@ from . import views | ||
3 | 3 | ||
4 | urlpatterns = [ | 4 | urlpatterns = [ |
5 | url(r'^create_link/(?P<slug>[\w_-]+)/$', views.CreateLink.as_view(), name='create_link'), | 5 | url(r'^create_link/(?P<slug>[\w_-]+)/$', views.CreateLink.as_view(), name='create_link'), |
6 | - url(r'^deletelink/(?P<linkname>[\w_-]+)/$', views.deleteLink,name = 'delete_link'), | ||
7 | - url(r'^updatelink/(?P<slug>[\w_-]+)/$', views.UpdateLink.as_view(),name = 'update_link'), | ||
8 | - url(r'^render-link/(?P<id>[0-9]+)/$', views.render_link, name='render_link'), | 6 | + url(r'^delete_link/(?P<slug>[\w_-]+)/$', views.DeleteLink.as_view(),name = 'delete_link'), |
7 | + url(r'^update_link/(?P<slug>[\w_-]+)/$', views.UpdateLink.as_view(),name = 'update_link'), | ||
8 | + url(r'^render-link/(?P<slug>[\w_-]+)/$', views.render_link, name='render_link'), | ||
9 | url(r'^view_link/(?P<slug>[\w_-]+)/$',views.ViewLink.as_view(),name = 'view_link') | 9 | url(r'^view_link/(?P<slug>[\w_-]+)/$',views.ViewLink.as_view(),name = 'view_link') |
10 | ] | 10 | ] |
links/views.py
@@ -6,12 +6,16 @@ from django.utils.translation import ugettext_lazy as _ | @@ -6,12 +6,16 @@ from django.utils.translation import ugettext_lazy as _ | ||
6 | from django.shortcuts import get_object_or_404,redirect | 6 | from django.shortcuts import get_object_or_404,redirect |
7 | from django.contrib.auth.mixins import LoginRequiredMixin | 7 | from django.contrib.auth.mixins import LoginRequiredMixin |
8 | from rolepermissions.mixins import HasRoleMixin | 8 | from rolepermissions.mixins import HasRoleMixin |
9 | +from core.mixins import NotificationMixin | ||
10 | +from django.urls import reverse | ||
11 | +from django.core.files.base import ContentFile | ||
12 | +from rolepermissions.verifications import has_role | ||
9 | 13 | ||
14 | +from .image_crawler import * | ||
10 | from courses.models import Topic | 15 | from courses.models import Topic |
11 | from .models import Link | 16 | from .models import Link |
12 | from .forms import * | 17 | from .forms import * |
13 | -from core.mixins import NotificationMixin | ||
14 | -from django.urls import reverse | 18 | + |
15 | 19 | ||
16 | # Create your views here. | 20 | # Create your views here. |
17 | class CreateLink(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.CreateView): | 21 | class CreateLink(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.CreateView): |
@@ -20,19 +24,36 @@ class CreateLink(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.Cr | @@ -20,19 +24,36 @@ class CreateLink(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.Cr | ||
20 | form_class = CreateLinkForm | 24 | form_class = CreateLinkForm |
21 | success_url = reverse_lazy('course:manage') | 25 | success_url = reverse_lazy('course:manage') |
22 | context_object_name = 'form' | 26 | context_object_name = 'form' |
27 | + def form_invalid(self,form): | ||
28 | + context = super(CreateLink, self).form_invalid(form) | ||
29 | + context.status_code = 400 | ||
30 | + | ||
31 | + return context | ||
23 | 32 | ||
24 | def form_valid(self, form): | 33 | def form_valid(self, form): |
25 | self.object = form.save(commit = False) | 34 | self.object = form.save(commit = False) |
26 | topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | 35 | topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) |
27 | self.object.topic = topic | 36 | self.object.topic = topic |
28 | - messages.success(self.request, _('Link created successfully!')) | ||
29 | - | ||
30 | self.object.save() | 37 | self.object.save() |
38 | + self.link = Link.objects.get(slug = self.object.slug) | ||
39 | + self.formato,self.baixado = get_images(self.link.link_url,self.link.slug) | ||
40 | + self.caminho = 'links/static/images/%s'%(self.link.slug)+'%s'%(self.formato) | ||
41 | + | ||
31 | super(CreateLink, self).createNotification(message="created a Link at "+ self.object.topic.name, actor=self.request.user, | 42 | super(CreateLink, self).createNotification(message="created a Link at "+ self.object.topic.name, actor=self.request.user, |
32 | - resource_name=self.object.name, resource_link= reverse('course:view_topic', args=[self.object.topic.slug]), | 43 | + resource_name=self.object.name, resource_link= reverse('course:view_topic', args=[self.object.topic.slug]), |
33 | users=self.object.topic.subject.students.all()) | 44 | users=self.object.topic.subject.students.all()) |
34 | - | 45 | + self.setImage() |
35 | return self.get_success_url() | 46 | return self.get_success_url() |
47 | + def setImage(self): | ||
48 | + if self.baixado: | ||
49 | + with open(self.caminho,'rb') as f: | ||
50 | + data = f.read() | ||
51 | + nome = '%s'%(self.link.slug)+"%s"%(self.formato) | ||
52 | + self.link.image.save(nome,ContentFile(data)) | ||
53 | + else: | ||
54 | + with open('links/static/images/default.jpg','rb') as f: | ||
55 | + data = f.read() | ||
56 | + self.link.image.save('default.jpg',ContentFile(data)) | ||
36 | def get_context_data(self,**kwargs): | 57 | def get_context_data(self,**kwargs): |
37 | context = {} | 58 | context = {} |
38 | context['links'] = Link.objects.all() | 59 | context['links'] = Link.objects.all() |
@@ -41,20 +62,37 @@ class CreateLink(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.Cr | @@ -41,20 +62,37 @@ class CreateLink(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.Cr | ||
41 | context["topic"] = topic | 62 | context["topic"] = topic |
42 | return context | 63 | return context |
43 | def get_success_url(self): | 64 | def get_success_url(self): |
44 | - self.success_url = redirect('course:links:render_link', id = self.object.id) | 65 | + self.success_url = redirect('course:links:render_link', slug = self.object.slug) |
45 | return self.success_url | 66 | return self.success_url |
46 | -def deleteLink(request,linkname): | ||
47 | - link = get_object_or_404(Link,name = linkname) | ||
48 | - link.delete() | ||
49 | - template_name = 'links/delete_link.html' | ||
50 | - messages.success(request,_("Link deleted Successfully!")) | ||
51 | - | ||
52 | - return redirect('course:manage') | ||
53 | 67 | ||
54 | -def render_link(request, id): | 68 | +class DeleteLink(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): |
69 | + allowed_roles = ['professor', 'system_admin'] | ||
70 | + login_url = reverse_lazy("core:home") | ||
71 | + redirect_field_name = 'next' | ||
72 | + model = Link | ||
73 | + template_name = 'links/delete_link.html' | ||
74 | + | ||
75 | + def dispatch(self, *args, **kwargs): | ||
76 | + link = get_object_or_404(Link, slug = self.kwargs.get('slug')) | ||
77 | + if(not (link.topic.owner == self.request.user) and not(has_role(self.request.user, 'system_admin')) ): | ||
78 | + return self.handle_no_permission() | ||
79 | + return super(DeleteLink, self).dispatch(*args, **kwargs) | ||
80 | + | ||
81 | + def get_context_data(self, **kwargs): | ||
82 | + context = super(DeleteLink, self).get_context_data(**kwargs) | ||
83 | + context['course'] = self.object.topic.subject.course | ||
84 | + context['subject'] = self.object.topic.subject | ||
85 | + context['link'] = self.object | ||
86 | + context["topic"] = self.object.topic | ||
87 | + return context | ||
88 | + | ||
89 | + def get_success_url(self): | ||
90 | + return reverse_lazy('course:view_topic', kwargs={'slug' : self.object.topic.slug}) | ||
91 | + | ||
92 | +def render_link(request, slug): | ||
55 | template_name = 'links/render_link.html' | 93 | template_name = 'links/render_link.html' |
56 | context = { | 94 | context = { |
57 | - 'link': get_object_or_404(Link, id = id) | 95 | + 'link': get_object_or_404(Link, slug = slug) |
58 | } | 96 | } |
59 | return render(request, template_name, context) | 97 | return render(request, template_name, context) |
60 | 98 | ||
@@ -64,18 +102,41 @@ class UpdateLink(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): | @@ -64,18 +102,41 @@ class UpdateLink(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): | ||
64 | template_name = 'links/update_link.html' | 102 | template_name = 'links/update_link.html' |
65 | form_class = UpdateLinkForm | 103 | form_class = UpdateLinkForm |
66 | success_url = reverse_lazy('course:links:render_link') | 104 | success_url = reverse_lazy('course:links:render_link') |
67 | - def form_valid(self, form): | ||
68 | - form.save() | ||
69 | - messages.success(self.request, _('Link updated successfully!')) | ||
70 | 105 | ||
71 | - return super(UpdateLink, self).form_valid(form) | 106 | + def form_invalid(self,form): |
107 | + context = super(UpdateLink, self).form_invalid(form) | ||
108 | + context.status_code = 400 | ||
72 | 109 | ||
110 | + return context | ||
111 | + def form_valid(self, form): | ||
112 | + formulario = form | ||
113 | + if formulario.has_changed(): | ||
114 | + if 'link_url' in formulario.changed_data: | ||
115 | + self.object = form.save() | ||
116 | + self.link = Link.objects.get(slug = self.object.slug) | ||
117 | + self.formato,self.baixado = get_images(self.link.link_url,self.link.slug) | ||
118 | + self.caminho = 'links/static/images/%s'%(self.link.slug)+'%s'%(self.formato) | ||
119 | + self.setImage() | ||
120 | + else: | ||
121 | + form.save() | ||
122 | + else: | ||
123 | + form.save() | ||
124 | + return super(UpdateLink, self).form_valid(form) | ||
125 | + def setImage(self): | ||
126 | + if self.baixado: | ||
127 | + with open(self.caminho,'rb') as f: | ||
128 | + data = f.read() | ||
129 | + nome = '%s'%(self.link.slug)+"%s"%(self.formato) | ||
130 | + self.object.image.save(nome,ContentFile(data)) | ||
131 | + else: | ||
132 | + with open('links/static/images/default.jpg','rb') as f: | ||
133 | + data = f.read() | ||
134 | + self.object.image.save('default.jpg',ContentFile(data)) | ||
73 | def get_object(self, queryset=None): | 135 | def get_object(self, queryset=None): |
74 | self.object = get_object_or_404(Link, slug = self.kwargs.get('slug')) | 136 | self.object = get_object_or_404(Link, slug = self.kwargs.get('slug')) |
75 | - print(self.object.link_description) | ||
76 | return self.object | 137 | return self.object |
77 | def get_success_url(self): | 138 | def get_success_url(self): |
78 | - self.success_url = redirect('course:links:render_link', id = self.object.id) | 139 | + self.success_url = reverse_lazy('course:links:render_link', args = (self.object.slug, )) |
79 | return self.success_url | 140 | return self.success_url |
80 | class ViewLink(LoginRequiredMixin,HasRoleMixin,generic.DetailView): | 141 | class ViewLink(LoginRequiredMixin,HasRoleMixin,generic.DetailView): |
81 | allowed_roles = ['professor', 'system_admin'] | 142 | allowed_roles = ['professor', 'system_admin'] |
@@ -88,7 +149,7 @@ class ViewLink(LoginRequiredMixin,HasRoleMixin,generic.DetailView): | @@ -88,7 +149,7 @@ class ViewLink(LoginRequiredMixin,HasRoleMixin,generic.DetailView): | ||
88 | context['link'] = link | 149 | context['link'] = link |
89 | return context | 150 | return context |
90 | def get_success_url(self): | 151 | def get_success_url(self): |
91 | - self.success_url = redirect('course:links:render_link', id = self.object.id) | 152 | + self.success_url = redirect('course:links:render_link', slug = self.object.slug) |
92 | return self.success_url | 153 | return self.success_url |
93 | def get_queryset(self): | 154 | def get_queryset(self): |
94 | self.queryset = Link.objects.filter(slug = self.kwargs.get('slug')) | 155 | self.queryset = Link.objects.filter(slug = self.kwargs.get('slug')) |
@@ -0,0 +1,131 @@ | @@ -0,0 +1,131 @@ | ||
1 | +# SOME DESCRIPTIVE TITLE. | ||
2 | +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||
3 | +# This file is distributed under the same license as the PACKAGE package. | ||
4 | +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||
5 | +# | ||
6 | +#, fuzzy | ||
7 | +msgid "" | ||
8 | +msgstr "" | ||
9 | +"Project-Id-Version: PACKAGE VERSION\n" | ||
10 | +"Report-Msgid-Bugs-To: \n" | ||
11 | +"POT-Creation-Date: 2016-10-26 14:47-0300\n" | ||
12 | +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||
13 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||
14 | +"Language-Team: LANGUAGE <LL@li.org>\n" | ||
15 | +"Language: \n" | ||
16 | +"MIME-Version: 1.0\n" | ||
17 | +"Content-Type: text/plain; charset=UTF-8\n" | ||
18 | +"Content-Transfer-Encoding: 8bit\n" | ||
19 | +"Plural-Forms: nplurals=2; plural=(n > 1);\n" | ||
20 | + | ||
21 | +#: poll/forms.py:18 poll/forms.py:22 | ||
22 | +msgid "It is required one these fields." | ||
23 | +msgstr "" | ||
24 | + | ||
25 | +#: poll/models.py:11 poll/models.py:32 | ||
26 | +msgid "Poll" | ||
27 | +msgstr "Enquete" | ||
28 | + | ||
29 | +#: poll/models.py:12 | ||
30 | +msgid "Polls" | ||
31 | +msgstr "Enquetes" | ||
32 | + | ||
33 | +#: poll/models.py:18 poll/models.py:24 poll/templates/poll/answer.html:11 | ||
34 | +#: poll/templates/poll/answer_student.html:27 | ||
35 | +#: poll/templates/poll/create.html:68 poll/templates/poll/create.html:85 | ||
36 | +#: poll/templates/poll/view.html:33 | ||
37 | +msgid "Answer" | ||
38 | +msgstr "Reposta" | ||
39 | + | ||
40 | +#: poll/models.py:19 | ||
41 | +msgid "Order" | ||
42 | +msgstr "Ordem" | ||
43 | + | ||
44 | +#: poll/models.py:20 poll/models.py:25 | ||
45 | +msgid "Answers" | ||
46 | +msgstr "Repostas" | ||
47 | + | ||
48 | +#: poll/models.py:31 | ||
49 | +msgid "Answered" | ||
50 | +msgstr "Respondido" | ||
51 | + | ||
52 | +#: poll/models.py:33 | ||
53 | +msgid "Answers Students" | ||
54 | +msgstr "Respostas dos estudantes" | ||
55 | + | ||
56 | +#: poll/models.py:34 | ||
57 | +msgid "Student" | ||
58 | +msgstr "Estudante" | ||
59 | + | ||
60 | +#: poll/models.py:35 | ||
61 | +msgid "Answered Date" | ||
62 | +msgstr "Data de resposta" | ||
63 | + | ||
64 | +#: poll/models.py:38 | ||
65 | +msgid "Answer Stundent" | ||
66 | +msgstr "Resposta do estudante" | ||
67 | + | ||
68 | +#: poll/models.py:39 | ||
69 | +msgid "Answers Student" | ||
70 | +msgstr "Respostas dos estudantes" | ||
71 | + | ||
72 | +#: poll/templates/poll/answer.html:12 poll/templates/poll/create.html:69 | ||
73 | +#: poll/templates/poll/create.html:86 | ||
74 | +msgid "Possible answer for the question" | ||
75 | +msgstr "Possível resposta para a questão" | ||
76 | + | ||
77 | +#: poll/templates/poll/create.html:22 | ||
78 | +msgid "Create a Poll" | ||
79 | +msgstr "Criar enquete" | ||
80 | + | ||
81 | +#: poll/templates/poll/create.html:38 | ||
82 | +msgid "Question?" | ||
83 | +msgstr "Pergunta?" | ||
84 | + | ||
85 | +#: poll/templates/poll/create.html:39 | ||
86 | +msgid "A Question to be answered" | ||
87 | +msgstr "A questão a ser respondida" | ||
88 | + | ||
89 | +#: poll/templates/poll/create.html:154 | ||
90 | +msgid "Close" | ||
91 | +msgstr "Fechar" | ||
92 | + | ||
93 | +#: poll/templates/poll/create.html:157 | ||
94 | +msgid "Create" | ||
95 | +msgstr "Criar" | ||
96 | + | ||
97 | +#: poll/templates/poll/remove.html:7 | ||
98 | +msgid "Delete Poll" | ||
99 | +msgstr "Deletar enquete" | ||
100 | + | ||
101 | +#: poll/templates/poll/remove.html:15 | ||
102 | +msgid "Are you sure you want to delete the subject" | ||
103 | +msgstr "Tem certeza que deseja deletar este assunto" | ||
104 | + | ||
105 | +#: poll/templates/poll/remove.html:19 | ||
106 | +msgid "Delete" | ||
107 | +msgstr "Deletar" | ||
108 | + | ||
109 | +#: poll/templates/poll/update.html:7 | ||
110 | +msgid "Update a Poll" | ||
111 | +msgstr "Atualizar enquete" | ||
112 | + | ||
113 | +#: poll/templates/poll/update.html:12 | ||
114 | +msgid "Update" | ||
115 | +msgstr "Atualizar" | ||
116 | + | ||
117 | +#: poll/templates/poll/view.html:17 | ||
118 | +msgid "Limit date:" | ||
119 | +msgstr "Data limite:" | ||
120 | + | ||
121 | +#: poll/templates/poll/view.html:20 | ||
122 | +msgid "Status:" | ||
123 | +msgstr "Status:" | ||
124 | + | ||
125 | +#: poll/templates/poll/view.html:22 | ||
126 | +msgid "Poll answered" | ||
127 | +msgstr "Enquete respondida" | ||
128 | + | ||
129 | +#: poll/templates/poll/view.html:24 | ||
130 | +msgid "Poll don't yet answered" | ||
131 | +msgstr "A enquete não foi respondida ainda" |
poll/templates/poll/create.html
@@ -99,7 +99,7 @@ | @@ -99,7 +99,7 @@ | ||
99 | <div class="row form-group {% if form.has_error %} has-error {% endif %}"> | 99 | <div class="row form-group {% if form.has_error %} has-error {% endif %}"> |
100 | <label for="{{ form.limit_date.auto_id }}">{{ form.limit_date.label }}</label> | 100 | <label for="{{ form.limit_date.auto_id }}">{{ form.limit_date.label }}</label> |
101 | {# {% render_field form.limit_date class="form-control" form="form"%} #} | 101 | {# {% render_field form.limit_date class="form-control" form="form"%} #} |
102 | - <input form="form" class="form-control" type="date" name="{{form.limit_date.name}}" {% if form.limit_date.value != None %}value="{% if form.limit_date.value.year %}{{form.limit_date.value|date:'Y-m-d'}}{% else %}{{form.limit_date.value}}{% endif %}"{% endif %}> | 102 | + <input form="form" class="form-control date-picker" type="text" name="{{form.limit_date.name}}" {% if form.limit_date.value != None %}value="{{form.limit_date.value|date:'SHORT_DATE_FORMAT'}}"{% endif %}> |
103 | {% if form.limit_date.errors %} | 103 | {% if form.limit_date.errors %} |
104 | <div class="not_submited"> | 104 | <div class="not_submited"> |
105 | </br> | 105 | </br> |
@@ -166,6 +166,12 @@ | @@ -166,6 +166,12 @@ | ||
166 | </script> | 166 | </script> |
167 | {% block script_poll %} | 167 | {% block script_poll %} |
168 | <script type="text/javascript"> | 168 | <script type="text/javascript"> |
169 | + var locale = navigator.language || navigator.userLanguage; | ||
170 | + | ||
171 | + $('.date-picker').datepicker({ | ||
172 | + language: locale, | ||
173 | + }); | ||
174 | + | ||
169 | // Este js tem que ficar aqui se não o button add não vai funcionar | 175 | // Este js tem que ficar aqui se não o button add não vai funcionar |
170 | $("#add").click(function (){ | 176 | $("#add").click(function (){ |
171 | Answer.init('{% url "course:poll:answer_poll" %}'); | 177 | Answer.init('{% url "course:poll:answer_poll" %}'); |
poll/templates/poll/update.html
@@ -14,6 +14,11 @@ | @@ -14,6 +14,11 @@ | ||
14 | 14 | ||
15 | {% block script_poll %} | 15 | {% block script_poll %} |
16 | <script type="text/javascript"> | 16 | <script type="text/javascript"> |
17 | + var locale = navigator.language || navigator.userLanguage; | ||
18 | + | ||
19 | + $('.date-picker').datepicker({ | ||
20 | + language: locale, | ||
21 | + }); | ||
17 | // Este js tem que ficar aqui se não o button add não vai funcionar | 22 | // Este js tem que ficar aqui se não o button add não vai funcionar |
18 | $("#add").click(function (){ | 23 | $("#add").click(function (){ |
19 | Answer.init('{% url "course:poll:answer_poll" %}'); | 24 | Answer.init('{% url "course:poll:answer_poll" %}'); |
requirements.txt
@@ -21,4 +21,7 @@ pycpfcnpj==1.0.2 | @@ -21,4 +21,7 @@ pycpfcnpj==1.0.2 | ||
21 | six==1.10.0 | 21 | six==1.10.0 |
22 | validators==0.11.0 | 22 | validators==0.11.0 |
23 | Werkzeug==0.11.11 | 23 | Werkzeug==0.11.11 |
24 | -whitenoise==3.2.2 | ||
25 | \ No newline at end of file | 24 | \ No newline at end of file |
25 | +whitenoise==3.2.2 | ||
26 | +beautifulsoup4==4.5.1 | ||
27 | +lxml==3.6.4 | ||
28 | +requests==2.11.1 |
users/forms.py
@@ -30,7 +30,9 @@ class AdminUserForm(forms.ModelForm): | @@ -30,7 +30,9 @@ class AdminUserForm(forms.ModelForm): | ||
30 | 30 | ||
31 | class Meta: | 31 | class Meta: |
32 | model = User | 32 | model = User |
33 | - fields = ['username', 'name', 'email', 'password', 'birth_date', 'city', 'state', 'gender', 'type_profile', 'cpf', 'phone', 'image', 'is_staff', 'is_active'] | 33 | + fields = ['username', 'name', 'email', 'password', |
34 | + 'birth_date', 'city', 'state', 'gender', 'type_profile', 'cpf', 'phone', | ||
35 | + 'image', 'titration', 'year_titration', 'institution', 'curriculum', 'is_staff', 'is_active'] | ||
34 | widgets = { | 36 | widgets = { |
35 | 'password':forms.PasswordInput | 37 | 'password':forms.PasswordInput |
36 | } | 38 | } |
@@ -39,7 +41,9 @@ class UserForm(RegisterUserForm): | @@ -39,7 +41,9 @@ class UserForm(RegisterUserForm): | ||
39 | 41 | ||
40 | class Meta: | 42 | class Meta: |
41 | model = User | 43 | model = User |
42 | - fields = ['username', 'name', 'email', 'birth_date', 'city', 'state', 'gender', 'type_profile', 'cpf', 'phone', 'image', 'titration', 'year_titration', 'institution', 'curriculum', 'is_staff', 'is_active'] | 44 | + fields = ['username', 'name', 'email', 'birth_date', 'city', |
45 | + 'state', 'gender', 'type_profile', 'cpf', 'phone', 'image', 'titration', | ||
46 | + 'year_titration', 'institution', 'curriculum', 'is_staff', 'is_active'] | ||
43 | 47 | ||
44 | class UpdateUserForm(forms.ModelForm): | 48 | class UpdateUserForm(forms.ModelForm): |
45 | 49 | ||
@@ -59,16 +63,27 @@ class UpdateUserForm(forms.ModelForm): | @@ -59,16 +63,27 @@ class UpdateUserForm(forms.ModelForm): | ||
59 | def clean_birth_date(self): | 63 | def clean_birth_date(self): |
60 | birth_date = self.cleaned_data['birth_date'] | 64 | birth_date = self.cleaned_data['birth_date'] |
61 | if birth_date >= date.today(): | 65 | if birth_date >= date.today(): |
62 | - print('===============' + date.today() + '================') | ||
63 | raise forms.ValidationError(_('Please enter a valid date')) | 66 | raise forms.ValidationError(_('Please enter a valid date')) |
64 | return birth_date | 67 | return birth_date |
65 | 68 | ||
66 | class Meta: | 69 | class Meta: |
67 | model = User | 70 | model = User |
68 | - fields = ['username', 'name', 'email', 'city', 'state', 'birth_date', 'gender', 'type_profile', 'cpf', 'phone', 'image', 'is_staff', 'is_active'] | 71 | + fields = ['username', 'name', 'email', 'birth_date', 'city', |
72 | + 'state', 'gender', 'type_profile', 'cpf', 'phone', 'image', 'titration', | ||
73 | + 'year_titration', 'institution', 'curriculum', 'is_staff', 'is_active'] | ||
74 | + | ||
75 | +class UpdateProfileFormAdmin(UpdateUserForm): | ||
76 | + | ||
77 | + class Meta: | ||
78 | + model = User | ||
79 | + fields = ['username', 'name', 'email', 'birth_date', 'city', | ||
80 | + 'state', 'gender', 'type_profile', 'cpf', 'phone', 'image', 'titration', | ||
81 | + 'year_titration', 'institution', 'curriculum', 'is_staff', 'is_active'] | ||
69 | 82 | ||
70 | class UpdateProfileForm(UpdateUserForm): | 83 | class UpdateProfileForm(UpdateUserForm): |
71 | 84 | ||
72 | class Meta: | 85 | class Meta: |
73 | model = User | 86 | model = User |
74 | - fields = ['username', 'name', 'email', 'birth_date', 'city', 'state', 'gender', 'cpf', 'phone', 'image', 'curriculum'] | 87 | + fields = ['username', 'name', 'email', 'birth_date', 'city', |
88 | + 'state', 'gender', 'cpf', 'phone', 'image', 'titration', | ||
89 | + 'year_titration', 'institution', 'curriculum'] |
users/locale/pt_BR/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid "" | @@ -8,7 +8,7 @@ msgid "" | ||
8 | msgstr "" | 8 | msgstr "" |
9 | "Project-Id-Version: PACKAGE VERSION\n" | 9 | "Project-Id-Version: PACKAGE VERSION\n" |
10 | "Report-Msgid-Bugs-To: \n" | 10 | "Report-Msgid-Bugs-To: \n" |
11 | -"POT-Creation-Date: 2016-09-07 00:13-0300\n" | 11 | +"POT-Creation-Date: 2016-10-26 14:47-0300\n" |
12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | 13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
14 | "Language-Team: LANGUAGE <LL@li.org>\n" | 14 | "Language-Team: LANGUAGE <LL@li.org>\n" |
@@ -18,15 +18,19 @@ msgstr "" | @@ -18,15 +18,19 @@ msgstr "" | ||
18 | "Content-Transfer-Encoding: 8bit\n" | 18 | "Content-Transfer-Encoding: 8bit\n" |
19 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" | 19 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" |
20 | 20 | ||
21 | -#: users/forms.py:10 | ||
22 | -msgid "Password" | ||
23 | -msgstr "Senha" | 21 | +#: users/forms.py:60 |
22 | +msgid "Please enter a valid CPF" | ||
23 | +msgstr "Por favor, insira um CPF válido" | ||
24 | + | ||
25 | +#: users/forms.py:67 | ||
26 | +msgid "Please enter a valid date" | ||
27 | +msgstr "Por favor, insira uma data válida" | ||
24 | 28 | ||
25 | -#: users/models.py:10 | 29 | +#: users/models.py:11 users/templates/users/profile.html:61 |
26 | msgid "Login" | 30 | msgid "Login" |
27 | -msgstr "Entrar" | 31 | +msgstr "Login" |
28 | 32 | ||
29 | -#: users/models.py:13 | 33 | +#: users/models.py:14 |
30 | msgid "" | 34 | msgid "" |
31 | "Type a valid username. This fields should only contain letters, numbers and " | 35 | "Type a valid username. This fields should only contain letters, numbers and " |
32 | "the characteres: @/./+/-/_ ." | 36 | "the characteres: @/./+/-/_ ." |
@@ -34,223 +38,369 @@ msgstr "" | @@ -34,223 +38,369 @@ msgstr "" | ||
34 | "Digite um nome de usuário válido. Esse campo deve conter apenas letras, " | 38 | "Digite um nome de usuário válido. Esse campo deve conter apenas letras, " |
35 | "números e os caracteres: @/./+/-/_ ." | 39 | "números e os caracteres: @/./+/-/_ ." |
36 | 40 | ||
37 | -#: users/models.py:16 | 41 | +#: users/models.py:17 |
38 | msgid "" | 42 | msgid "" |
39 | "A short name that will be used to identify you in the platform and to access " | 43 | "A short name that will be used to identify you in the platform and to access " |
40 | "it" | 44 | "it" |
41 | msgstr "" | 45 | msgstr "" |
46 | +"Um nome curto que será usado para se identificar no acesso à plataforma" | ||
42 | 47 | ||
43 | -#: users/models.py:17 | 48 | +#: users/models.py:18 |
44 | msgid "Mail" | 49 | msgid "Mail" |
45 | msgstr "Email" | 50 | msgstr "Email" |
46 | 51 | ||
47 | -#: users/models.py:18 users/templates/list_users.html:50 | 52 | +#: users/models.py:19 users/templates/list_users.html:67 |
48 | msgid "Name" | 53 | msgid "Name" |
49 | msgstr "Nome" | 54 | msgstr "Nome" |
50 | 55 | ||
51 | -#: users/models.py:19 | 56 | +#: users/models.py:20 |
52 | msgid "City" | 57 | msgid "City" |
53 | msgstr "Cidade" | 58 | msgstr "Cidade" |
54 | 59 | ||
55 | -#: users/models.py:20 | 60 | +#: users/models.py:21 |
56 | msgid "State" | 61 | msgid "State" |
57 | msgstr "Estado" | 62 | msgstr "Estado" |
58 | 63 | ||
59 | -#: users/models.py:21 | 64 | +#: users/models.py:22 users/templates/users/profile.html:105 |
60 | msgid "Gender" | 65 | msgid "Gender" |
61 | -msgstr "Genero" | 66 | +msgstr "Gênero" |
62 | 67 | ||
63 | -#: users/models.py:21 | 68 | +#: users/models.py:22 |
64 | msgid "Male" | 69 | msgid "Male" |
65 | msgstr "Masculino" | 70 | msgstr "Masculino" |
66 | 71 | ||
67 | -#: users/models.py:21 | 72 | +#: users/models.py:22 |
68 | msgid "Female" | 73 | msgid "Female" |
69 | msgstr "Feminino" | 74 | msgstr "Feminino" |
70 | 75 | ||
71 | -#: users/models.py:22 | 76 | +#: users/models.py:23 |
72 | msgid "Image" | 77 | msgid "Image" |
73 | msgstr "Imagem" | 78 | msgstr "Imagem" |
74 | 79 | ||
75 | -#: users/models.py:23 | 80 | +#: users/models.py:24 users/templates/users/profile.html:109 |
76 | msgid "Birth Date" | 81 | msgid "Birth Date" |
77 | msgstr "Data de nascimento" | 82 | msgstr "Data de nascimento" |
78 | 83 | ||
79 | -#: users/models.py:24 | 84 | +#: users/models.py:25 |
80 | msgid "Phone" | 85 | msgid "Phone" |
81 | msgstr "Telefone" | 86 | msgstr "Telefone" |
82 | 87 | ||
83 | -#: users/models.py:25 users/templates/users/profile.html:42 | 88 | +#: users/models.py:26 |
84 | msgid "Cpf" | 89 | msgid "Cpf" |
85 | -msgstr "Cpf" | 90 | +msgstr "CPF" |
86 | 91 | ||
87 | -#: users/models.py:26 | 92 | +#: users/models.py:27 |
88 | msgid "Type" | 93 | msgid "Type" |
89 | msgstr "Tipo" | 94 | msgstr "Tipo" |
90 | 95 | ||
91 | -#: users/models.py:26 | 96 | +#: users/models.py:27 |
92 | msgid "Professor" | 97 | msgid "Professor" |
93 | msgstr "Professor" | 98 | msgstr "Professor" |
94 | 99 | ||
95 | -#: users/models.py:26 | 100 | +#: users/models.py:27 users/templates/users/profile.html:81 |
96 | msgid "Student" | 101 | msgid "Student" |
97 | msgstr "Aluno" | 102 | msgstr "Aluno" |
98 | 103 | ||
99 | -#: users/models.py:27 | 104 | +#: users/models.py:28 |
105 | +msgid "Titration" | ||
106 | +msgstr "Título" | ||
107 | + | ||
108 | +#: users/models.py:29 | ||
109 | +msgid "Year of titration" | ||
110 | +msgstr "Ano do título" | ||
111 | + | ||
112 | +#: users/models.py:30 | ||
113 | +msgid "Institution where he had titration" | ||
114 | +msgstr "Instituição o qual obteve o título" | ||
115 | + | ||
116 | +#: users/models.py:31 users/templates/users/profile.html:135 | ||
117 | +msgid "Curriculum" | ||
118 | +msgstr "Currículo" | ||
119 | + | ||
120 | +#: users/models.py:32 | ||
100 | msgid "Create Date" | 121 | msgid "Create Date" |
101 | msgstr "Data de criação" | 122 | msgstr "Data de criação" |
102 | 123 | ||
103 | -#: users/models.py:28 | 124 | +#: users/models.py:33 |
104 | msgid "Administrador" | 125 | msgid "Administrador" |
105 | msgstr "Administrador" | 126 | msgstr "Administrador" |
106 | 127 | ||
107 | -#: users/models.py:29 | 128 | +#: users/models.py:34 |
108 | msgid "Active" | 129 | msgid "Active" |
109 | msgstr "Ativo" | 130 | msgstr "Ativo" |
110 | 131 | ||
111 | -#: users/models.py:37 | 132 | +#: users/models.py:42 |
112 | msgid "User" | 133 | msgid "User" |
113 | msgstr "Usuário" | 134 | msgstr "Usuário" |
114 | 135 | ||
115 | -#: users/models.py:38 | 136 | +#: users/models.py:43 |
116 | msgid "Users" | 137 | msgid "Users" |
117 | msgstr "Usuários" | 138 | msgstr "Usuários" |
118 | 139 | ||
119 | -#: users/templates/list_users.html:9 users/templates/users/create.html:8 | ||
120 | -#: users/templates/users/edit_profile.html:8 users/templates/users/index.html:7 | ||
121 | -#: users/templates/users/profile.html:8 users/templates/users/update.html:8 | 140 | +#: users/templates/list_users.html:15 users/templates/users/profile.html:17 |
141 | +msgid "Menu" | ||
142 | +msgstr "Menu" | ||
143 | + | ||
144 | +#: users/templates/list_users.html:19 users/templates/users/index.html:7 | ||
122 | #: users/templates/users/view.html:7 | 145 | #: users/templates/users/view.html:7 |
123 | msgid "Home" | 146 | msgid "Home" |
124 | msgstr "Início" | 147 | msgstr "Início" |
125 | 148 | ||
126 | -#: users/templates/list_users.html:10 users/templates/users/index.html:8 | ||
127 | -msgid "Manage Users" | ||
128 | -msgstr "Gerenciar Usuários" | ||
129 | - | ||
130 | -#: users/templates/list_users.html:23 | 149 | +#: users/templates/list_users.html:20 |
131 | msgid "Add user" | 150 | msgid "Add user" |
132 | msgstr "Adicionar usuário" | 151 | msgstr "Adicionar usuário" |
133 | 152 | ||
134 | -#: users/templates/list_users.html:24 | 153 | +#: users/templates/list_users.html:21 |
135 | msgid "Send email" | 154 | msgid "Send email" |
136 | msgstr "Enviar e-mail" | 155 | msgstr "Enviar e-mail" |
137 | 156 | ||
138 | -#: users/templates/list_users.html:34 | 157 | +#: users/templates/list_users.html:41 |
139 | msgid "Search..." | 158 | msgid "Search..." |
140 | msgstr "Pesquisar..." | 159 | msgstr "Pesquisar..." |
141 | 160 | ||
142 | -#: users/templates/list_users.html:37 | 161 | +#: users/templates/list_users.html:45 |
143 | msgid "Search" | 162 | msgid "Search" |
144 | msgstr "Pesquisar" | 163 | msgstr "Pesquisar" |
145 | 164 | ||
146 | -#: users/templates/list_users.html:51 | ||
147 | -#: users/templates/users/edit_profile.html:16 | ||
148 | -#: users/templates/users/profile.html:9 users/templates/users/profile.html:16 | 165 | +#: users/templates/list_users.html:68 |
149 | msgid "Profile" | 166 | msgid "Profile" |
150 | msgstr "Perfil" | 167 | msgstr "Perfil" |
151 | 168 | ||
152 | -#: users/templates/list_users.html:52 | 169 | +#: users/templates/list_users.html:69 users/templates/users/profile.html:65 |
153 | msgid "Email" | 170 | msgid "Email" |
154 | msgstr "Email" | 171 | msgstr "Email" |
155 | 172 | ||
156 | -#: users/templates/list_users.html:53 | 173 | +#: users/templates/list_users.html:70 |
157 | msgid "Contact" | 174 | msgid "Contact" |
158 | msgstr "Contato" | 175 | msgstr "Contato" |
159 | 176 | ||
160 | -#: users/templates/list_users.html:55 | 177 | +#: users/templates/list_users.html:72 |
161 | msgid "Edit" | 178 | msgid "Edit" |
162 | msgstr "Editar" | 179 | msgstr "Editar" |
163 | 180 | ||
164 | -#: users/templates/list_users.html:56 | 181 | +#: users/templates/list_users.html:73 users/templates/list_users.html:91 |
165 | msgid "Delete" | 182 | msgid "Delete" |
166 | msgstr "Apagar" | 183 | msgstr "Apagar" |
167 | 184 | ||
168 | -#: users/templates/list_users.html:66 users/templates/users/index.html:74 | 185 | +#: users/templates/list_users.html:84 |
186 | +msgid "Confirm delete" | ||
187 | +msgstr "Confirmar" | ||
188 | + | ||
189 | +#: users/templates/list_users.html:87 | ||
190 | +msgid "Are you sure you want to delete the user" | ||
191 | +msgstr "Você tem certeza que deseja deletar o usuário" | ||
192 | + | ||
193 | +#: users/templates/list_users.html:90 | ||
194 | +#: users/templates/users/change_password.html:47 | ||
195 | +#: users/templates/users/create.html:130 | ||
196 | +#: users/templates/users/edit_profile.html:79 | ||
197 | +#: users/templates/users/remove_account.html:35 | ||
198 | +#: users/templates/users/update.html:83 | ||
199 | +msgid "Cancel" | ||
200 | +msgstr "Cancelar" | ||
201 | + | ||
202 | +#: users/templates/list_users.html:103 users/templates/users/index.html:74 | ||
169 | msgid "No users found" | 203 | msgid "No users found" |
170 | msgstr "Nenhum usuário encontrado" | 204 | msgstr "Nenhum usuário encontrado" |
171 | 205 | ||
172 | -#: users/templates/users/create.html:9 | ||
173 | -msgid "New User" | ||
174 | -msgstr "Novo usuário" | 206 | +#: users/templates/users/change_password.html:31 |
207 | +#, fuzzy | ||
208 | +#| msgid "Password" | ||
209 | +msgid "Current Password" | ||
210 | +msgstr "Senha" | ||
211 | + | ||
212 | +#: users/templates/users/change_password.html:35 | ||
213 | +#, fuzzy | ||
214 | +#| msgid "Password" | ||
215 | +msgid "New Password" | ||
216 | +msgstr "Senha" | ||
175 | 217 | ||
176 | -#: users/templates/users/create.html:16 users/templates/users/index.html:15 | ||
177 | -#: users/templates/users/update.html:16 users/templates/users/view.html:15 | 218 | +#: users/templates/users/change_password.html:39 |
219 | +msgid "Confirmation" | ||
220 | +msgstr "Confirmação" | ||
221 | + | ||
222 | +#: users/templates/users/change_password.html:44 | ||
223 | +#: users/templates/users/create.html:127 | ||
224 | +#: users/templates/users/edit_profile.html:76 | ||
225 | +#: users/templates/users/update.html:80 | ||
226 | +msgid "Save" | ||
227 | +msgstr "Salvar" | ||
228 | + | ||
229 | +#: users/templates/users/create.html:51 | ||
230 | +#: users/templates/users/edit_profile.html:39 | ||
231 | +#: users/templates/users/update.html:42 | ||
232 | +msgid "Choose your photo..." | ||
233 | +msgstr "Envie sua foto..." | ||
234 | + | ||
235 | +#: users/templates/users/create.html:67 | ||
236 | +msgid "Choose your file..." | ||
237 | +msgstr "Envie um arquivo..." | ||
238 | + | ||
239 | +#: users/templates/users/index.html:8 | ||
240 | +msgid "Manage Users" | ||
241 | +msgstr "Gerenciar Usuários" | ||
242 | + | ||
243 | +#: users/templates/users/index.html:15 users/templates/users/view.html:15 | ||
178 | msgid "System Users" | 244 | msgid "System Users" |
179 | msgstr "Usuários do sistema" | 245 | msgstr "Usuários do sistema" |
180 | 246 | ||
181 | -#: users/templates/users/create.html:19 users/templates/users/index.html:18 | ||
182 | -#: users/templates/users/update.html:19 users/templates/users/view.html:18 | 247 | +#: users/templates/users/index.html:18 users/templates/users/view.html:18 |
183 | msgid "New Account" | 248 | msgid "New Account" |
184 | -msgstr "" | 249 | +msgstr "Nova conta" |
185 | 250 | ||
186 | -#: users/templates/users/create.html:22 users/templates/users/index.html:21 | ||
187 | -#: users/templates/users/update.html:22 users/templates/users/view.html:27 | 251 | +#: users/templates/users/index.html:21 users/templates/users/view.html:27 |
188 | msgid "Send Mail" | 252 | msgid "Send Mail" |
189 | -msgstr "" | 253 | +msgstr "Enviar email" |
190 | 254 | ||
191 | -#: users/templates/users/create.html:32 | ||
192 | -#: users/templates/users/edit_profile.html:29 | ||
193 | -#: users/templates/users/update.html:32 | ||
194 | -msgid "All fields are required" | ||
195 | -msgstr "" | 255 | +#: users/templates/users/index.html:56 users/templates/users/view.html:39 |
256 | +msgid "Administrator" | ||
257 | +msgstr "Administrador" | ||
196 | 258 | ||
197 | -#: users/templates/users/create.html:57 | ||
198 | -#: users/templates/users/edit_profile.html:64 | ||
199 | -#: users/templates/users/update.html:57 | ||
200 | -msgid "Save" | ||
201 | -msgstr "" | 259 | +#: users/templates/users/profile.html:21 |
260 | +#, fuzzy | ||
261 | +#| msgid "Home" | ||
262 | +msgid "Home page" | ||
263 | +msgstr "Início" | ||
202 | 264 | ||
203 | -#: users/templates/users/edit_profile.html:9 | ||
204 | -#: users/templates/users/edit_profile.html:19 | ||
205 | -#: users/templates/users/profile.html:19 | 265 | +#: users/templates/users/profile.html:22 |
266 | +#, fuzzy | ||
267 | +#| msgid "Edit Profile" | ||
268 | +msgid "View Profile" | ||
269 | +msgstr "Editar perfil" | ||
270 | + | ||
271 | +#: users/templates/users/profile.html:23 | ||
206 | msgid "Edit Profile" | 272 | msgid "Edit Profile" |
207 | -msgstr "" | 273 | +msgstr "Editar perfil" |
208 | 274 | ||
209 | -#: users/templates/users/index.html:56 users/templates/users/profile.html:32 | ||
210 | -#: users/templates/users/view.html:39 | ||
211 | -msgid "Administrator" | ||
212 | -msgstr "" | 275 | +#: users/templates/users/profile.html:24 |
276 | +#, fuzzy | ||
277 | +#| msgid "Password" | ||
278 | +msgid "Change Password" | ||
279 | +msgstr "Senha" | ||
213 | 280 | ||
214 | -#: users/templates/users/profile.html:36 users/templates/users/view.html:43 | ||
215 | -msgid "Mail:" | ||
216 | -msgstr "" | 281 | +#: users/templates/users/profile.html:25 |
282 | +#, fuzzy | ||
283 | +#| msgid "New Account" | ||
284 | +msgid "Remove account" | ||
285 | +msgstr "Nova conta" | ||
217 | 286 | ||
218 | -#: users/templates/users/profile.html:39 users/templates/users/view.html:46 | ||
219 | -msgid "Phone:" | ||
220 | -msgstr "" | 287 | +#: users/templates/users/profile.html:53 |
288 | +#, fuzzy | ||
289 | +#| msgid "State" | ||
290 | +msgid "Status" | ||
291 | +msgstr "Estado" | ||
221 | 292 | ||
222 | -#: users/templates/users/profile.html:45 | ||
223 | -msgid "Birth date" | ||
224 | -msgstr "" | 293 | +#: users/templates/users/profile.html:77 |
294 | +msgid "User role" | ||
295 | +msgstr "Tipo de usuário" | ||
225 | 296 | ||
226 | -#: users/templates/users/update.html:9 | ||
227 | -msgid "Edit user" | ||
228 | -msgstr "" | 297 | +#: users/templates/users/profile.html:79 |
298 | +msgid "Teacher" | ||
299 | +msgstr "Professor" | ||
300 | + | ||
301 | +#: users/templates/users/profile.html:86 | ||
302 | +msgid "CPF" | ||
303 | +msgstr "CPF" | ||
304 | + | ||
305 | +#: users/templates/users/profile.html:91 | ||
306 | +msgid "doesn't posssess CPF" | ||
307 | +msgstr "Não possui CPF" | ||
308 | + | ||
309 | +#: users/templates/users/profile.html:96 | ||
310 | +msgid "Phone Number" | ||
311 | +msgstr "Telefone" | ||
312 | + | ||
313 | +#: users/templates/users/profile.html:100 | ||
314 | +msgid "doesn't posssess Phone" | ||
315 | +msgstr "Não possui telefone" | ||
316 | + | ||
317 | +#: users/templates/users/profile.html:113 | ||
318 | +msgid "State and City" | ||
319 | +msgstr "Estado e cidade" | ||
320 | + | ||
321 | +#: users/templates/users/profile.html:117 | ||
322 | +msgid "Title" | ||
323 | +msgstr "Título" | ||
324 | + | ||
325 | +#: users/templates/users/profile.html:121 | ||
326 | +msgid "Year" | ||
327 | +msgstr "Ano" | ||
328 | + | ||
329 | +#: users/templates/users/profile.html:125 | ||
330 | +msgid "Institution" | ||
331 | +msgstr "Instituição" | ||
332 | + | ||
333 | +#: users/templates/users/profile.html:129 | ||
334 | +msgid "Didn't inform institution" | ||
335 | +msgstr "Não informou a instituição" | ||
336 | + | ||
337 | +#: users/templates/users/profile.html:139 | ||
338 | +msgid "Didn't upload any curriculum" | ||
339 | +msgstr "Não enviou nenhum currículo" | ||
340 | + | ||
341 | +#: users/templates/users/remove_account.html:28 | ||
342 | +msgid "Are you sure you want delete this account?" | ||
343 | +msgstr "Voce tem certeza que deseja remover esta conta?" | ||
344 | + | ||
345 | +#: users/templates/users/remove_account.html:29 | ||
346 | +msgid "" | ||
347 | +"All data will be lost and havent how recover it." | ||
348 | +msgstr "Todos os seus dados serão removidos e não haverá como recupera-los posteriormente." | ||
349 | + | ||
350 | +#: users/templates/users/remove_account.html:32 | ||
351 | +msgid "Remove" | ||
352 | +msgstr "Remover" | ||
229 | 353 | ||
230 | #: users/templates/users/view.html:21 | 354 | #: users/templates/users/view.html:21 |
231 | msgid "View User Account" | 355 | msgid "View User Account" |
232 | -msgstr "" | 356 | +msgstr "Visualizar perfil" |
233 | 357 | ||
234 | #: users/templates/users/view.html:24 | 358 | #: users/templates/users/view.html:24 |
235 | msgid "Edit User Account" | 359 | msgid "Edit User Account" |
236 | -msgstr "" | 360 | +msgstr "Editar perfil" |
361 | + | ||
362 | +#: users/templates/users/view.html:43 | ||
363 | +msgid "Mail:" | ||
364 | +msgstr "E-mail" | ||
365 | + | ||
366 | +#: users/templates/users/view.html:46 | ||
367 | +msgid "Phone:" | ||
368 | +msgstr "Telefone" | ||
237 | 369 | ||
238 | #: users/templates/users/view.html:49 | 370 | #: users/templates/users/view.html:49 |
239 | msgid "Cpf:" | 371 | msgid "Cpf:" |
240 | -msgstr "" | 372 | +msgstr "CPF" |
241 | 373 | ||
242 | #: users/templates/users/view.html:52 | 374 | #: users/templates/users/view.html:52 |
243 | msgid "Birth date:" | 375 | msgid "Birth date:" |
244 | -msgstr "" | 376 | +msgstr "Data de nascimento:" |
245 | 377 | ||
246 | -#: users/views.py:54 | 378 | +#: users/views.py:55 |
247 | msgid "User created successfully!" | 379 | msgid "User created successfully!" |
248 | -msgstr "" | 380 | +msgstr "Usuário criado com sucesso!" |
249 | 381 | ||
250 | -#: users/views.py:83 | 382 | +#: users/views.py:84 |
251 | msgid "User edited successfully!" | 383 | msgid "User edited successfully!" |
252 | -msgstr "" | 384 | +msgstr "Usuário editado com sucesso!" |
253 | 385 | ||
254 | -#: users/views.py:132 users/views.py:149 | 386 | +#: users/views.py:101 |
387 | +#, fuzzy | ||
388 | +#| msgid "User edited successfully!" | ||
389 | +msgid "User deleted Successfully!" | ||
390 | +msgstr "Usuário editado com sucesso!" | ||
391 | + | ||
392 | +#: users/views.py:126 | ||
255 | msgid "Profile edited successfully!" | 393 | msgid "Profile edited successfully!" |
256 | -msgstr "" | 394 | +msgstr "Perfil editado com sucesso!" |
395 | + | ||
396 | +#~ msgid "New User" | ||
397 | +#~ msgstr "Novo usuário" | ||
398 | + | ||
399 | +#~ msgid "All fields are required" | ||
400 | +#~ msgstr "Todos os campos são obrigatórios" | ||
401 | + | ||
402 | +#~ msgid "Birth date" | ||
403 | +#~ msgstr "Data de nascimento" | ||
404 | + | ||
405 | +#~ msgid "Edit user" | ||
406 | +#~ msgstr "Editar usuário" |
users/models.py
@@ -34,7 +34,7 @@ class User(AbstractBaseUser, PermissionsMixin): | @@ -34,7 +34,7 @@ class User(AbstractBaseUser, PermissionsMixin): | ||
34 | is_active = models.BooleanField(_('Active'), default = True) | 34 | is_active = models.BooleanField(_('Active'), default = True) |
35 | 35 | ||
36 | USERNAME_FIELD = 'username' | 36 | USERNAME_FIELD = 'username' |
37 | - REQUIRED_FIELDS = ['email'] | 37 | + REQUIRED_FIELDS = ['email', 'cpf'] |
38 | 38 | ||
39 | objects = UserManager() | 39 | objects = UserManager() |
40 | 40 |
users/templates/list_users.html
1 | {% extends 'home.html' %} | 1 | {% extends 'home.html' %} |
2 | 2 | ||
3 | -{% load i18n pagination django_bootstrap_breadcrumbs static %} | 3 | +{% load i18n pagination django_bootstrap_breadcrumbs permission_tags static %} |
4 | 4 | ||
5 | {% block breadcrumbs %} | 5 | {% block breadcrumbs %} |
6 | 6 | ||
@@ -9,20 +9,23 @@ | @@ -9,20 +9,23 @@ | ||
9 | 9 | ||
10 | {% endblock %} | 10 | {% endblock %} |
11 | 11 | ||
12 | -{% block sidebar %} | ||
13 | - <div class="panel panel-primary navigation"> | ||
14 | - <div class="panel-heading"> | ||
15 | - <h5>Menu</h5> | ||
16 | - </div> | ||
17 | - <div class="panel-body"> | ||
18 | - <ul class="nav nav-pills nav-stacked"> | ||
19 | - <li><a href="{% url 'core:home' %}">{% trans "Home" %}</a></li> | ||
20 | - <li><a href="{% url 'users:create' %}">{% trans 'Add user' %}</a></li> | ||
21 | - <li><a href="javascript:void(0)">{% trans 'Send email' %}</a></li> | ||
22 | - </ul> | 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> | ||
23 | </div> | 25 | </div> |
24 | - </div> | ||
25 | -{% endblock %} | 26 | + {% endblock %} |
27 | +{% endif %} | ||
28 | + | ||
26 | 29 | ||
27 | {% block content %} | 30 | {% block content %} |
28 | {% if messages %} | 31 | {% if messages %} |
@@ -54,7 +57,7 @@ | @@ -54,7 +57,7 @@ | ||
54 | <div class="panel-body"> | 57 | <div class="panel-body"> |
55 | <div class="col-md-4"> | 58 | <div class="col-md-4"> |
56 | {% if acc.image %} | 59 | {% if acc.image %} |
57 | - <img src="{{ acc.image.url }}" alt="photoUser" class="img-circle img-responsive img-list-user"> | 60 | + <div style="background-image: url('{{ acc.image.url }}'); background-size: 100% 100%; background-repeat: no-repeat;" alt="photoUser" class="img-circle img-responsive img-list-user"></div> |
58 | {% else %} | 61 | {% else %} |
59 | {% if acc.gender == 'M' %} | 62 | {% if acc.gender == 'M' %} |
60 | <img src="{% static 'img/male_avatar.png' %}" alt="Avatar" class="img-circle img-responsive img-list-user"> | 63 | <img src="{% static 'img/male_avatar.png' %}" alt="Avatar" class="img-circle img-responsive img-list-user"> |
@@ -81,14 +84,14 @@ | @@ -81,14 +84,14 @@ | ||
81 | <div class="modal-content"> | 84 | <div class="modal-content"> |
82 | <div class="modal-header"> | 85 | <div class="modal-header"> |
83 | <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> | 86 | <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> |
84 | - <h4 class="modal-title" id="DeleteModalLabel">Confirm delete</h4> | 87 | + <h4 class="modal-title" id="DeleteModalLabel">{% trans 'Confirm delete' %}</h4> |
85 | </div> | 88 | </div> |
86 | <div class="modal-body"> | 89 | <div class="modal-body"> |
87 | - Are you sure you want to delete the user <b>{{acc.name}}</b>? | 90 | + {% trans 'Are you sure you want to delete the user' %} <b>{{acc.name}}</b>? |
88 | </div> | 91 | </div> |
89 | <div class="modal-footer"> | 92 | <div class="modal-footer"> |
90 | - <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button> | ||
91 | - <button type="button" class="btn btn-primary"> <a href="{% url 'users:delete' acc.username %}">Delete</a></button> | 93 | + <button type="button" class="btn btn-default" data-dismiss="modal">{% trans 'Cancel' %}</button> |
94 | + <button type="button" class="btn btn-primary"> <a href="{% url 'users:delete' acc.username %}">{% trans 'Delete' %}</a></button> | ||
92 | </div> | 95 | </div> |
93 | </div> | 96 | </div> |
94 | </div> | 97 | </div> |
users/templates/users/edit_profile.html
1 | {% extends 'users/profile.html' %} | 1 | {% extends 'users/profile.html' %} |
2 | 2 | ||
3 | -{% load static i18n %} | 3 | +{% load static i18n permission_tags %} |
4 | {% load widget_tweaks %} | 4 | {% load widget_tweaks %} |
5 | + | ||
5 | {% load django_bootstrap_breadcrumbs %} | 6 | {% load django_bootstrap_breadcrumbs %} |
6 | 7 | ||
7 | {% block breadcrumbs %} | 8 | {% block breadcrumbs %} |
8 | - | ||
9 | - {{ block.super }} | ||
10 | - {% breadcrumb 'Edit' 'users:update_profile' %} | 9 | + {% if user|has_role:'system_admin' %} |
10 | + {{ block.super }} | ||
11 | + {% breadcrumb 'Update User' 'users:update' %} | ||
12 | + {% else %} | ||
13 | + {{ block.super }} | ||
14 | + {% breadcrumb 'Update Profile' 'users:update' %} | ||
15 | + {% endif %} | ||
11 | 16 | ||
12 | {% endblock %} | 17 | {% endblock %} |
13 | 18 | ||
19 | + | ||
14 | {% block content %} | 20 | {% block content %} |
15 | {% if messages %} | 21 | {% if messages %} |
16 | {% for message in messages %} | 22 | {% for message in messages %} |
@@ -22,41 +28,59 @@ | @@ -22,41 +28,59 @@ | ||
22 | </div> | 28 | </div> |
23 | {% endfor %} | 29 | {% endfor %} |
24 | {% endif %} | 30 | {% endif %} |
25 | - <div class="card"> | 31 | + |
32 | + <div class="card mg-b-5m"> | ||
26 | <div class="card-content"> | 33 | <div class="card-content"> |
27 | <div class="card-body"> | 34 | <div class="card-body"> |
28 | <form method="post" action="" enctype="multipart/form-data"> | 35 | <form method="post" action="" enctype="multipart/form-data"> |
29 | {% csrf_token %} | 36 | {% csrf_token %} |
30 | {% for field in form %} | 37 | {% for field in form %} |
31 | <div class="form-group{% if form.has_error %} has-error {% endif %} is-fileinput"> | 38 | <div class="form-group{% if form.has_error %} has-error {% endif %} is-fileinput"> |
32 | - <label for="{{ field.auto_id }}">{{ field.label }}</label> | 39 | + {% if not field.auto_id == 'id_is_staff' and not field.auto_id == 'id_is_active' and not field.auto_id == 'id_type_profile' %} |
40 | + <label for="{{ field.auto_id }}">{{ field.label }}</label> | ||
41 | + {% endif %} | ||
33 | {% if field.auto_id == 'id_birth_date' %} | 42 | {% if field.auto_id == 'id_birth_date' %} |
34 | - <input type="text" class="form-control date-picker"name="{{field.name}}" value="{% if field.value.year %}{{field.value|date:'Y-m-d'}}{% else %}{{field.value}}{% endif %}" min="{{now|date:'Y-m-d'}}" id="{{ field.auto_id }}"> | 43 | + <input type="text" class="form-control date-picker"name="{{field.name}}" value="{{field.value|date:'SHORT_DATE_FORMAT'}}" min="{{now|date:'SHORT_DATE_FORMAT'}}" id="{{ field.auto_id }}"> |
35 | <span id="helpBlock" class="help-block">{{ field.help_text }}</span> | 44 | <span id="helpBlock" class="help-block">{{ field.help_text }}</span> |
36 | - {% elif field.auto_id == 'id_image' %} | 45 | + {% elif field.auto_id == 'id_image' or field.auto_id == 'id_curriculum'%} |
37 | {% render_field field class='form-control input-sm' %} | 46 | {% render_field field class='form-control input-sm' %} |
38 | <div class="input-group"> | 47 | <div class="input-group"> |
39 | - <input type="text" readonly="" class="form-control" placeholder="{% trans 'Choose your photo...' %}"> | 48 | + <input type="text" readonly="" class="form-control" placeholder="{% trans 'Choose your file...' %}"> |
40 | <span class="input-group-btn input-group-sm"> | 49 | <span class="input-group-btn input-group-sm"> |
41 | <button type="button" class="btn btn-fab btn-fab-mini"> | 50 | <button type="button" class="btn btn-fab btn-fab-mini"> |
42 | <i class="material-icons">attach_file</i> | 51 | <i class="material-icons">attach_file</i> |
43 | </button> | 52 | </button> |
44 | </span> | 53 | </span> |
45 | </div> | 54 | </div> |
46 | - {% elif field.auto_id == 'id_is_staff' or field.auto_id == 'id_is_active' %} | ||
47 | - <div class="checkbox"> | ||
48 | - <label> | ||
49 | - {% render_field field type='checkbox' %} | ||
50 | - </label> | ||
51 | - </div> | ||
52 | {% elif field.auto_id == 'id_cpf' %} | 55 | {% elif field.auto_id == 'id_cpf' %} |
53 | {% render_field field class='form-control' onkeypress='campoNumerico(this,event); formatarCpf(this,event);' %} | 56 | {% render_field field class='form-control' onkeypress='campoNumerico(this,event); formatarCpf(this,event);' %} |
54 | 57 | ||
55 | {% elif field.auto_id == 'id_phone' %} | 58 | {% elif field.auto_id == 'id_phone' %} |
56 | {% render_field field class='form-control' onkeypress='campoNumerico(this,event); formatarTelefone(this,event);' %} | 59 | {% render_field field class='form-control' onkeypress='campoNumerico(this,event); formatarTelefone(this,event);' %} |
60 | + | ||
61 | + {% elif field.auto_id == 'id_year_titration' %} | ||
62 | + {% render_field field class='form-control' onkeypress='campoNumerico(this,event);' %} | ||
63 | + | ||
64 | + {% elif field.auto_id == 'id_is_staff' or field.auto_id == 'id_is_active' %} | ||
65 | + {% if user|has_role:'system_admin' %} | ||
66 | + <label for="{{ field.auto_id }}">{{ field.label }}</label> | ||
67 | + <div class="checkbox"> | ||
68 | + <label for="{{ field.auto_id }}"> | ||
69 | + {% render_field field %}<span class="checkbox-material"><span class="check"></span></span> {{field.label}} | ||
70 | + </label> | ||
71 | + </div> | ||
72 | + {% endif %} | ||
73 | + {% elif field.auto_id == 'id_type_profile' %} | ||
74 | + {% if user|has_role:'system_admin' %} | ||
75 | + <label for="{{ field.auto_id }}">{{ field.label }}</label> | ||
76 | + {% render_field field class='form-control' %} | ||
77 | + <span id="helpBlock" class="help-block">{{ field.help_text }}</span> | ||
78 | + {% endif %} | ||
57 | {% else %} | 79 | {% else %} |
58 | - {% render_field field class='form-control' %} | ||
59 | - <span id="helpBlock" class="help-block">{{ field.help_text }}</span> | 80 | + {% if not field.auto_id == 'id_is_staff' and not field.auto_id == 'id_is_active' and not field.auto_id == 'id_type_profile' %} |
81 | + {% render_field field class='form-control' %} | ||
82 | + <span id="helpBlock" class="help-block">{{ field.help_text }}</span> | ||
83 | + {% endif %} | ||
60 | {% endif %} | 84 | {% endif %} |
61 | {% if field.errors %} | 85 | {% if field.errors %} |
62 | <div class="alert alert-danger alert-dismissible" role="alert"> | 86 | <div class="alert alert-danger alert-dismissible" role="alert"> |
@@ -72,16 +96,15 @@ | @@ -72,16 +96,15 @@ | ||
72 | {% endif %} | 96 | {% endif %} |
73 | </div> | 97 | </div> |
74 | {% endfor %} | 98 | {% endfor %} |
75 | - <div class="col-md-3 col-sm-2 col-xs-2"> | ||
76 | - <input type="submit" value="{% trans 'Save' %}" class="btn btn-raised btn-block btn-success" /> | 99 | + <div class="col-md-offset-2 col-md-2 col-sm-2 col-xs-2"> |
100 | + <input type="submit" value="{% trans 'Save' %}" class="btn btn-raised btn-success" /> | ||
77 | </div> | 101 | </div> |
78 | - <div class="col-md-3 col-sm-2 col-xs-2"> | ||
79 | - <a href="{% url 'users:profile' %}" class="btn btn-raised btn-block btn-danger" >{% trans 'Cancel' %}</a> | 102 | + <div class="col-md-offset-3 col-md-2 col-sm-2 col-xs-2"> |
103 | + <a href="{% url 'users:profile' %}" class="btn btn-raised btn-danger" >{% trans 'Cancel' %}</a> | ||
80 | </div> | 104 | </div> |
81 | </form> | 105 | </form> |
82 | </div> | 106 | </div> |
83 | </div> | 107 | </div> |
84 | </div> | 108 | </div> |
85 | - | ||
86 | <br clear="all" /> | 109 | <br clear="all" /> |
87 | {% endblock %} | 110 | {% endblock %} |
users/templates/users/profile.html
@@ -14,7 +14,7 @@ | @@ -14,7 +14,7 @@ | ||
14 | {% block sidebar %} | 14 | {% block sidebar %} |
15 | <div class="panel panel-primary navigation"> | 15 | <div class="panel panel-primary navigation"> |
16 | <div class="panel-heading"> | 16 | <div class="panel-heading"> |
17 | - <h4>Menu</h4> | 17 | + <h4>{% trans "Menu" %}</h4> |
18 | </div> | 18 | </div> |
19 | <div class="panel-body"> | 19 | <div class="panel-body"> |
20 | <ul class="nav nav-pills nav-stacked"> | 20 | <ul class="nav nav-pills nav-stacked"> |
@@ -44,25 +44,38 @@ | @@ -44,25 +44,38 @@ | ||
44 | <div class="well well-lg"> | 44 | <div class="well well-lg"> |
45 | <div class="row"> | 45 | <div class="row"> |
46 | <div class="col-md-4"> | 46 | <div class="col-md-4"> |
47 | - <img src="{{ user.image_url }}" class="img-responsive center-block img-circle" alt="foto perfil" style="max-height:174px"> | 47 | + {% if user.image %} |
48 | + <div style="background-image: url('{{ user.image.url }}'); background-size: 100% 100%; background-repeat: no-repeat; margin-left: 8em;" alt="photoUser" class="img-circle img-responsive img-list-user"></div> | ||
49 | + {% else %} | ||
50 | + {% if usser.gender == 'M' %} | ||
51 | + <img src="{% static 'img/male_avatar.png' %}" alt="Avatar" class="img-circle img-responsive img-list-user" style="margin-left: 8em;"> | ||
52 | + {% else %} | ||
53 | + <img src="{% static 'img/female_avatar.png' %}" alt="Avatar" class="img-circle img-responsive img-list-user" style="margin-left: 8em;"> | ||
54 | + {% endif %} | ||
55 | + {% endif %} | ||
48 | </div> | 56 | </div> |
49 | <div class="col-md-8"> | 57 | <div class="col-md-8"> |
50 | <table class="table table-hover table-edited"> | 58 | <table class="table table-hover table-edited"> |
51 | <tbody> | 59 | <tbody> |
52 | <tr> | 60 | <tr> |
53 | - <td>Status:</td> | ||
54 | - <td>Offline</td> | 61 | + <td>{% trans "Status" %}:</td> |
62 | + {% if user %} | ||
63 | + <td> {% trans "Online" %}</td> | ||
64 | + {% else %} | ||
65 | + <td> {% trans "OffLine" %}</td> | ||
66 | + {% endif %} | ||
67 | + | ||
55 | </tr> | 68 | </tr> |
56 | <tr> | 69 | <tr> |
57 | - <td>Nome:</td> | 70 | + <td>{% trans "Name" %}:</td> |
58 | <td>{{user}}</td> | 71 | <td>{{user}}</td> |
59 | </tr> | 72 | </tr> |
60 | <tr> | 73 | <tr> |
61 | - <td>Login:</td> | 74 | + <td>{% trans "Login" %}</td> |
62 | <td>{{user.username}}</td> | 75 | <td>{{user.username}}</td> |
63 | </tr> | 76 | </tr> |
64 | <tr> | 77 | <tr> |
65 | - <td>Email:</td> | 78 | + <td>{% trans "Email" %}:</td> |
66 | <td>{{user.email}}</td> | 79 | <td>{{user.email}}</td> |
67 | </tr> | 80 | </tr> |
68 | </tbody> | 81 | </tbody> |
@@ -74,44 +87,70 @@ | @@ -74,44 +87,70 @@ | ||
74 | <table class="table table-hover table-edited"> | 87 | <table class="table table-hover table-edited"> |
75 | <tbody> | 88 | <tbody> |
76 | <tr> | 89 | <tr> |
77 | - <td>Tipo de usuário:</td> | ||
78 | - <td>{{use.type_profile}}</td> | 90 | + <td>{% trans "User role" %}:</td> |
91 | + {% if user.type_profile == 1 %} | ||
92 | + <td>{% trans "Teacher" %}</td> | ||
93 | + {% else %} | ||
94 | + <td>{% trans "Student" %}</td> | ||
95 | + {% endif %} | ||
96 | + | ||
79 | </tr> | 97 | </tr> |
80 | <tr> | 98 | <tr> |
81 | - <td>CPF:</td> | ||
82 | - <td>{{user.cpf}}</td> | 99 | + <td>{% trans "CPF" %}:</td> |
100 | + {% if user.cpf %} | ||
101 | + <td>{{user.cpf}}</td> | ||
102 | + | ||
103 | + {% else %} | ||
104 | + <td>{% trans "doesn't possess CPF" %}</td> | ||
105 | + {% endif %} | ||
106 | + | ||
83 | </tr> | 107 | </tr> |
84 | <tr> | 108 | <tr> |
85 | - <td>Número de telefone:</td> | ||
86 | - <td>{{user.phone}}</td> | 109 | + <td>{% trans "Phone Number" %}:</td> |
110 | + {% if user.phone %} | ||
111 | + <td>{{user.phone}}</td> | ||
112 | + {% else %} | ||
113 | + <td>{% trans "doesn't possess Phone" %}</td> | ||
114 | + {% endif %} | ||
115 | + | ||
87 | </tr> | 116 | </tr> |
88 | <tr> | 117 | <tr> |
89 | - <td>Sexo:</td> | 118 | + <td>{% trans "Gender" %}:</td> |
90 | <td>{{user.gender}}</td> | 119 | <td>{{user.gender}}</td> |
91 | </tr> | 120 | </tr> |
92 | <tr> | 121 | <tr> |
93 | - <td>Data de Nascimento:</td> | 122 | + <td>{% trans "Birth Date" %}:</td> |
94 | <td>{{user.birth_date}}</td> | 123 | <td>{{user.birth_date}}</td> |
95 | </tr> | 124 | </tr> |
96 | <tr> | 125 | <tr> |
97 | - <td>Estado e Cidade:</td> | 126 | + <td>{% trans "State and City" %}:</td> |
98 | <td>{{user.state}} - {{user.city}}</td> | 127 | <td>{{user.state}} - {{user.city}}</td> |
99 | </tr> | 128 | </tr> |
100 | <tr> | 129 | <tr> |
101 | - <td>Titulação:</td> | ||
102 | - <td>Mestrado</td> | 130 | + <td>{% trans "Title" %}:</td> |
131 | + <td>{{user.titration}}</td> | ||
103 | </tr> | 132 | </tr> |
104 | <tr> | 133 | <tr> |
105 | - <td>Ano:</td> | ||
106 | - <td>2012</td> | 134 | + <td>{% trans "Year" %}:</td> |
135 | + <td>{{user.year_titration}}</td> | ||
107 | </tr> | 136 | </tr> |
108 | <tr> | 137 | <tr> |
109 | - <td>Instituição:</td> | ||
110 | - <td>UFPE</td> | 138 | + <td>{% trans "Institution" %}:</td> |
139 | + {% if user.institution %} | ||
140 | + <td>{{user.institution}}</td> | ||
141 | + {% else %} | ||
142 | + <td>{% trans "Didn't inform institution" %}</td> | ||
143 | + {% endif %} | ||
111 | </tr> | 144 | </tr> |
112 | <tr> | 145 | <tr> |
113 | - <td>Currículo:</td> | ||
114 | - <td>-</td> | 146 | + <td>{% trans "Curriculum" %}:</td> |
147 | + {% if user.curriculum %} | ||
148 | + <td> | ||
149 | + <a href="{{user.curriculum.url }}" target="_blank">link</a> | ||
150 | + </td> | ||
151 | + {% else %} | ||
152 | + <td>{% trans "Didn't upload any curriculum" %}</td> | ||
153 | + {% endif %} | ||
115 | </tr> | 154 | </tr> |
116 | </tbody> | 155 | </tbody> |
117 | </table> | 156 | </table> |
users/templates/users/remove_account.html
@@ -25,8 +25,8 @@ | @@ -25,8 +25,8 @@ | ||
25 | <div class="row"> | 25 | <div class="row"> |
26 | <div class="col-md-12"> | 26 | <div class="col-md-12"> |
27 | <div class="well well-lg"> | 27 | <div class="well well-lg"> |
28 | - <h2>Voce tem certeza que deseja remover esta conta?</h2> | ||
29 | - <p>Todos os seus dados serão removidos e não haverá como recupera-los posteriormente.</p> | 28 | + <h2>{% trans 'Are you sure you want delete this account?' %}</h2> |
29 | + <p>{% trans 'All data will be lost and havent how recover it.' %}</p> | ||
30 | <div class="row"> | 30 | <div class="row"> |
31 | <div class="col-md-3 col-sm-2 col-xs-2"> | 31 | <div class="col-md-3 col-sm-2 col-xs-2"> |
32 | <a href="#" class="btn btn-raised btn-block btn-success" >{% trans 'Remove' %}</a> | 32 | <a href="#" class="btn btn-raised btn-block btn-success" >{% trans 'Remove' %}</a> |
users/templates/users/update.html
@@ -6,10 +6,10 @@ | @@ -6,10 +6,10 @@ | ||
6 | {% load django_bootstrap_breadcrumbs %} | 6 | {% load django_bootstrap_breadcrumbs %} |
7 | 7 | ||
8 | {% block breadcrumbs %} | 8 | {% block breadcrumbs %} |
9 | - | ||
10 | - {{ block.super }} | ||
11 | - {% breadcrumb 'Update User' 'users:update' %} | ||
12 | - | 9 | + |
10 | + {{ block.super }} | ||
11 | + {% breadcrumb 'Update User' 'users:update' %} | ||
12 | + | ||
13 | {% endblock %} | 13 | {% endblock %} |
14 | 14 | ||
15 | 15 | ||
@@ -25,7 +25,7 @@ | @@ -25,7 +25,7 @@ | ||
25 | {% endfor %} | 25 | {% endfor %} |
26 | {% endif %} | 26 | {% endif %} |
27 | 27 | ||
28 | - <div class="card"> | 28 | + <div class="card mg-b-5m"> |
29 | <div class="card-content"> | 29 | <div class="card-content"> |
30 | <div class="card-body"> | 30 | <div class="card-body"> |
31 | <form method="post" action="" enctype="multipart/form-data"> | 31 | <form method="post" action="" enctype="multipart/form-data"> |
@@ -34,12 +34,12 @@ | @@ -34,12 +34,12 @@ | ||
34 | <div class="form-group{% if form.has_error %} has-error {% endif %} is-fileinput"> | 34 | <div class="form-group{% if form.has_error %} has-error {% endif %} is-fileinput"> |
35 | <label for="{{ field.auto_id }}">{{ field.label }}</label> | 35 | <label for="{{ field.auto_id }}">{{ field.label }}</label> |
36 | {% if field.auto_id == 'id_birth_date' %} | 36 | {% if field.auto_id == 'id_birth_date' %} |
37 | - <input type="text" class="form-control date-picker"name="{{field.name}}" value="{% if field.value.year %}{{field.value|date:'Y-m-d'}}{% else %}{{field.value}}{% endif %}" min="{{now|date:'Y-m-d'}}" id="{{ field.auto_id }}"> | 37 | + <input type="text" class="form-control date-picker"name="{{field.name}}" value="{{field.value|date:'SHORT_DATE_FORMAT'}}" min="{{now|date:'SHORT_DATE_FORMAT'}}" id="{{ field.auto_id }}"> |
38 | <span id="helpBlock" class="help-block">{{ field.help_text }}</span> | 38 | <span id="helpBlock" class="help-block">{{ field.help_text }}</span> |
39 | - {% elif field.auto_id == 'id_image' %} | 39 | + {% elif field.auto_id == 'id_image' or field.auto_id == 'id_curriculum'%} |
40 | {% render_field field class='form-control input-sm' %} | 40 | {% render_field field class='form-control input-sm' %} |
41 | <div class="input-group"> | 41 | <div class="input-group"> |
42 | - <input type="text" readonly="" class="form-control" placeholder="{% trans 'Choose your photo...' %}"> | 42 | + <input type="text" readonly="" class="form-control" placeholder="{% trans 'Choose your file...' %}"> |
43 | <span class="input-group-btn input-group-sm"> | 43 | <span class="input-group-btn input-group-sm"> |
44 | <button type="button" class="btn btn-fab btn-fab-mini"> | 44 | <button type="button" class="btn btn-fab btn-fab-mini"> |
45 | <i class="material-icons">attach_file</i> | 45 | <i class="material-icons">attach_file</i> |
@@ -63,7 +63,7 @@ | @@ -63,7 +63,7 @@ | ||
63 | <span id="helpBlock" class="help-block">{{ field.help_text }}</span> | 63 | <span id="helpBlock" class="help-block">{{ field.help_text }}</span> |
64 | {% endif %} | 64 | {% endif %} |
65 | {% if field.errors %} | 65 | {% if field.errors %} |
66 | - <div class="alert alert-danger alert-dismissible col-md-offset-4 col-md-8" role="alert"> | 66 | + <div class="alert alert-danger alert-dismissible" role="alert"> |
67 | <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | 67 | <button type="button" class="close" data-dismiss="alert" aria-label="Close"> |
68 | <span aria-hidden="true">×</span> | 68 | <span aria-hidden="true">×</span> |
69 | </button> | 69 | </button> |
users/views.py
@@ -7,8 +7,9 @@ from django.contrib.auth.mixins import LoginRequiredMixin | @@ -7,8 +7,9 @@ from django.contrib.auth.mixins import LoginRequiredMixin | ||
7 | from django.core.urlresolvers import reverse_lazy | 7 | from django.core.urlresolvers import reverse_lazy |
8 | from django.utils.translation import ugettext_lazy as _ | 8 | from django.utils.translation import ugettext_lazy as _ |
9 | from rolepermissions.shortcuts import assign_role | 9 | from rolepermissions.shortcuts import assign_role |
10 | +from rolepermissions.verifications import has_role | ||
10 | from .models import User | 11 | from .models import User |
11 | -from .forms import UserForm, UpdateProfileForm, UpdateUserForm | 12 | +from .forms import UserForm, UpdateProfileForm, UpdateUserForm, UpdateProfileFormAdmin |
12 | 13 | ||
13 | # ================ ADMIN ======================= | 14 | # ================ ADMIN ======================= |
14 | class UsersListView(HasRoleMixin, LoginRequiredMixin, generic.ListView): | 15 | class UsersListView(HasRoleMixin, LoginRequiredMixin, generic.ListView): |
@@ -110,8 +111,6 @@ class Remove_account(generic.TemplateView): | @@ -110,8 +111,6 @@ class Remove_account(generic.TemplateView): | ||
110 | 111 | ||
111 | 112 | ||
112 | class UpdateProfile(LoginRequiredMixin, generic.edit.UpdateView): | 113 | class UpdateProfile(LoginRequiredMixin, generic.edit.UpdateView): |
113 | - | ||
114 | - allowed_roles = ['student'] | ||
115 | login_url = reverse_lazy("core:home") | 114 | login_url = reverse_lazy("core:home") |
116 | template_name = 'users/edit_profile.html' | 115 | template_name = 'users/edit_profile.html' |
117 | form_class = UpdateProfileForm | 116 | form_class = UpdateProfileForm |
@@ -121,6 +120,14 @@ class UpdateProfile(LoginRequiredMixin, generic.edit.UpdateView): | @@ -121,6 +120,14 @@ class UpdateProfile(LoginRequiredMixin, generic.edit.UpdateView): | ||
121 | user = get_object_or_404(User, username = self.request.user.username) | 120 | user = get_object_or_404(User, username = self.request.user.username) |
122 | return user | 121 | return user |
123 | 122 | ||
123 | + def get_context_data(self, **kwargs): | ||
124 | + context = super(UpdateProfile, self).get_context_data(**kwargs) | ||
125 | + if has_role(self.request.user, 'system_admin'): | ||
126 | + context['form'] = UpdateProfileFormAdmin(instance = self.object) | ||
127 | + else: | ||
128 | + context['form'] = UpdateProfileForm(instance = self.object) | ||
129 | + return context | ||
130 | + | ||
124 | def form_valid(self, form): | 131 | def form_valid(self, form): |
125 | form.save() | 132 | form.save() |
126 | messages.success(self.request, _('Profile edited successfully!')) | 133 | messages.success(self.request, _('Profile edited successfully!')) |