Commit da0c6bf248ff2d00056b5c4e93554f5a9e5affef
Exists in
master
and in
2 other branches
Merge branch 'refactoring' of https://github.com/amadeusproject/amadeuslms into refactoring
Showing
45 changed files
with
714 additions
and
167 deletions
Show diff stats
amadeus/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: 2017-04-11 19:17-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:12-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" |
@@ -26,95 +26,95 @@ msgstr "" | @@ -26,95 +26,95 @@ msgstr "" | ||
26 | msgid "English" | 26 | msgid "English" |
27 | msgstr "" | 27 | msgstr "" |
28 | 28 | ||
29 | -#: amadeus/templates/base.html:93 | 29 | +#: amadeus/templates/base.html:96 |
30 | msgid "Search for subjects and resources" | 30 | msgid "Search for subjects and resources" |
31 | msgstr "Buscar por assuntos ou recursos" | 31 | msgstr "Buscar por assuntos ou recursos" |
32 | 32 | ||
33 | -#: amadeus/templates/base.html:106 amadeus/templates/base.html:111 | 33 | +#: amadeus/templates/base.html:109 amadeus/templates/base.html:114 |
34 | msgid "Language Selector" | 34 | msgid "Language Selector" |
35 | msgstr "" | 35 | msgstr "" |
36 | 36 | ||
37 | -#: amadeus/templates/base.html:152 | 37 | +#: amadeus/templates/base.html:155 |
38 | msgid "Profile" | 38 | msgid "Profile" |
39 | msgstr "Perfil" | 39 | msgstr "Perfil" |
40 | 40 | ||
41 | -#: amadeus/templates/base.html:153 | 41 | +#: amadeus/templates/base.html:156 |
42 | msgid "Edit Profile" | 42 | msgid "Edit Profile" |
43 | msgstr "Editar Perfil" | 43 | msgstr "Editar Perfil" |
44 | 44 | ||
45 | -#: amadeus/templates/base.html:154 | 45 | +#: amadeus/templates/base.html:157 |
46 | msgid "Change Password" | 46 | msgid "Change Password" |
47 | msgstr "Alterar Senha" | 47 | msgstr "Alterar Senha" |
48 | 48 | ||
49 | -#: amadeus/templates/base.html:155 | 49 | +#: amadeus/templates/base.html:158 |
50 | msgid "Delete Account" | 50 | msgid "Delete Account" |
51 | msgstr "Remover Conta" | 51 | msgstr "Remover Conta" |
52 | 52 | ||
53 | -#: amadeus/templates/base.html:156 | 53 | +#: amadeus/templates/base.html:159 |
54 | msgid "Logout" | 54 | msgid "Logout" |
55 | msgstr "Sair" | 55 | msgstr "Sair" |
56 | 56 | ||
57 | -#: amadeus/templates/base.html:161 | 57 | +#: amadeus/templates/base.html:164 |
58 | msgid "settings" | 58 | msgid "settings" |
59 | msgstr "configurações" | 59 | msgstr "configurações" |
60 | 60 | ||
61 | -#: amadeus/templates/base.html:164 | 61 | +#: amadeus/templates/base.html:167 |
62 | msgid "Settings" | 62 | msgid "Settings" |
63 | msgstr "Configurações" | 63 | msgstr "Configurações" |
64 | 64 | ||
65 | -#: amadeus/templates/base.html:167 | 65 | +#: amadeus/templates/base.html:170 |
66 | msgid "Manage Users" | 66 | msgid "Manage Users" |
67 | msgstr "Gerenciar Usuários" | 67 | msgstr "Gerenciar Usuários" |
68 | 68 | ||
69 | -#: amadeus/templates/base.html:168 | 69 | +#: amadeus/templates/base.html:171 |
70 | msgid "Manage Categories" | 70 | msgid "Manage Categories" |
71 | msgstr "Gerenciar Categorias" | 71 | msgstr "Gerenciar Categorias" |
72 | 72 | ||
73 | -#: amadeus/templates/base.html:169 | 73 | +#: amadeus/templates/base.html:172 |
74 | msgid "Manage News" | 74 | msgid "Manage News" |
75 | msgstr "Gerenciar Notícias" | 75 | msgstr "Gerenciar Notícias" |
76 | 76 | ||
77 | -#: amadeus/templates/base.html:176 | 77 | +#: amadeus/templates/base.html:179 |
78 | msgid "System" | 78 | msgid "System" |
79 | msgstr "Sistema" | 79 | msgstr "Sistema" |
80 | 80 | ||
81 | -#: amadeus/templates/base.html:183 | 81 | +#: amadeus/templates/base.html:186 |
82 | msgid "Mail Sender" | 82 | msgid "Mail Sender" |
83 | msgstr "Remetente de Email" | 83 | msgstr "Remetente de Email" |
84 | 84 | ||
85 | -#: amadeus/templates/base.html:184 | 85 | +#: amadeus/templates/base.html:187 |
86 | msgid "Security" | 86 | msgid "Security" |
87 | msgstr "Segurança" | 87 | msgstr "Segurança" |
88 | 88 | ||
89 | -#: amadeus/templates/base.html:185 | 89 | +#: amadeus/templates/base.html:188 |
90 | msgid "Theme" | 90 | msgid "Theme" |
91 | msgstr "Temas" | 91 | msgstr "Temas" |
92 | 92 | ||
93 | -#: amadeus/templates/base.html:186 | 93 | +#: amadeus/templates/base.html:189 |
94 | #, fuzzy | 94 | #, fuzzy |
95 | #| msgid "Web Conference Settings" | 95 | #| msgid "Web Conference Settings" |
96 | msgid "Web Conference" | 96 | msgid "Web Conference" |
97 | msgstr "Web conferência" | 97 | msgstr "Web conferência" |
98 | 98 | ||
99 | -#: amadeus/templates/base.html:206 amadeus/templates/base.html:261 | 99 | +#: amadeus/templates/base.html:209 amadeus/templates/base.html:264 |
100 | msgid "Subjects" | 100 | msgid "Subjects" |
101 | msgstr "Assuntos" | 101 | msgstr "Assuntos" |
102 | 102 | ||
103 | -#: amadeus/templates/base.html:211 amadeus/templates/base.html:266 | 103 | +#: amadeus/templates/base.html:214 amadeus/templates/base.html:269 |
104 | msgid "Mural" | 104 | msgid "Mural" |
105 | msgstr "" | 105 | msgstr "" |
106 | 106 | ||
107 | -#: amadeus/templates/base.html:217 amadeus/templates/base.html:272 | 107 | +#: amadeus/templates/base.html:220 amadeus/templates/base.html:275 |
108 | msgid "Messages" | 108 | msgid "Messages" |
109 | msgstr "Mensagens" | 109 | msgstr "Mensagens" |
110 | 110 | ||
111 | -#: amadeus/templates/base.html:223 amadeus/templates/base.html:278 | 111 | +#: amadeus/templates/base.html:226 amadeus/templates/base.html:281 |
112 | #, fuzzy | 112 | #, fuzzy |
113 | #| msgid "Pendencias" | 113 | #| msgid "Pendencias" |
114 | msgid "Pendencies" | 114 | msgid "Pendencies" |
115 | msgstr "Pendências" | 115 | msgstr "Pendências" |
116 | 116 | ||
117 | -#: amadeus/templates/base.html:231 amadeus/templates/base.html:286 | 117 | +#: amadeus/templates/base.html:234 amadeus/templates/base.html:289 |
118 | msgid "Analytics" | 118 | msgid "Analytics" |
119 | msgstr "Analytics" | 119 | msgstr "Analytics" |
120 | 120 |
amadeus/settings.py
@@ -209,8 +209,8 @@ CRON_CLASSES = [ | @@ -209,8 +209,8 @@ CRON_CLASSES = [ | ||
209 | ] | 209 | ] |
210 | 210 | ||
211 | CRONJOBS = [ | 211 | CRONJOBS = [ |
212 | - ('1 */12 * * *', 'notifications.cron.notification_cron'), | ||
213 | - ('1 */12 * * *', 'goals.cron.setgoals_cron') | 212 | + ('0 0 * * *', 'notifications.cron.notification_cron'), |
213 | + ('0 0 * * *', 'goals.cron.setgoals_cron') | ||
214 | ] | 214 | ] |
215 | 215 | ||
216 | CHANNEL_LAYERS = { | 216 | CHANNEL_LAYERS = { |
@@ -0,0 +1,66 @@ | @@ -0,0 +1,66 @@ | ||
1 | +$(function () { | ||
2 | + | ||
3 | + /* Script para abrir o modal com a imagem selecionada */ | ||
4 | + $("#id_image").change(function () { | ||
5 | + if (this.files && this.files[0]) { | ||
6 | + var reader = new FileReader(); | ||
7 | + reader.onload = function (e) { | ||
8 | + $("#image").attr("src", e.target.result); | ||
9 | + $("#modalCrop").modal("show"); | ||
10 | + } | ||
11 | + reader.readAsDataURL(this.files[0]); | ||
12 | + } | ||
13 | + }); | ||
14 | + | ||
15 | + /* Scripts da caixa de corte da imagem */ | ||
16 | + var $image = $("#image"); | ||
17 | + var cropBoxData; | ||
18 | + var canvasData; | ||
19 | + $("#modalCrop").on("shown.bs.modal", function () { | ||
20 | + $image.cropper({ | ||
21 | + viewMode: 1, | ||
22 | + aspectRatio: 1/1, | ||
23 | + minCropBoxWidth: 700, | ||
24 | + minCropBoxHeight: 200, | ||
25 | + ready: function () { | ||
26 | + $image.cropper("setCanvasData", canvasData); | ||
27 | + $image.cropper("setCropBoxData", cropBoxData); | ||
28 | + } | ||
29 | + }); | ||
30 | + }).on("hidden.bs.modal", function () { | ||
31 | + cropBoxData = $image.cropper("getCropBoxData"); | ||
32 | + canvasData = $image.cropper("getCanvasData"); | ||
33 | + $image.cropper("destroy"); | ||
34 | + }); | ||
35 | + | ||
36 | + $(".js-zoom-in").click(function () { | ||
37 | + $image.cropper("zoom", 0.1); | ||
38 | + }); | ||
39 | + | ||
40 | + $(".js-zoom-out").click(function () { | ||
41 | + $image.cropper("zoom", -0.1); | ||
42 | + }); | ||
43 | + | ||
44 | + /* Script para pegar os valores das dimensões e depois fechar o modal */ | ||
45 | + $(".js-crop-and-upload").click(function () { | ||
46 | + var cropData = $image.cropper("getData"); | ||
47 | + $("#id_x").val(cropData["x"]); | ||
48 | + $("#id_y").val(cropData["y"]); | ||
49 | + $("#id_height").val(cropData["height"]); | ||
50 | + $("#id_width").val(cropData["width"]); | ||
51 | + $("#modalCrop").modal('hide'); | ||
52 | + }); | ||
53 | + | ||
54 | + /* Script para remover o arquivo enviado caso o usuário clique em cancelar*/ | ||
55 | + $("#id_image").on('change', function(){ | ||
56 | + console.log(this.value); | ||
57 | + }); | ||
58 | + | ||
59 | + $('#crop_cancel').on('click', function(e){ | ||
60 | + var input = $("#id_image"); | ||
61 | + var holder = $("#pic_holder"); | ||
62 | + input.replaceWith(input.val('').clone(true)); | ||
63 | + holder.replaceWith(holder.val('').clone(true)); | ||
64 | + }); | ||
65 | + | ||
66 | +}); |
amadeus/templates/base.html
@@ -32,6 +32,7 @@ | @@ -32,6 +32,7 @@ | ||
32 | 32 | ||
33 | <script src="{% static 'js/cropper.min.js' %}"></script> <!-- Js for cropper--> | 33 | <script src="{% static 'js/cropper.min.js' %}"></script> <!-- Js for cropper--> |
34 | <script src="{% static 'js/crop.js' %}"></script> <!-- Js for cropper--> | 34 | <script src="{% static 'js/crop.js' %}"></script> <!-- Js for cropper--> |
35 | + <script src="{% static 'js/crop_news.js' %}"></script> | ||
35 | <link href="{% static 'css/cropper.min.css' %}" rel="stylesheet"> <!-- CSS for cropper--> | 36 | <link href="{% static 'css/cropper.min.css' %}" rel="stylesheet"> <!-- CSS for cropper--> |
36 | 37 | ||
37 | <script type="text/javascript" src="{% static 'js/printThis.js' %}"></script> <!-- Print this plugin js--> | 38 | <script type="text/javascript" src="{% static 'js/printThis.js' %}"></script> <!-- Print this plugin js--> |
categories/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: 2017-04-11 19:18-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:13-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" |
chat/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: 2017-04-11 19:17-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:12-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" |
@@ -0,0 +1,16 @@ | @@ -0,0 +1,16 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10.4 on 2017-04-13 23:34 | ||
3 | +from __future__ import unicode_literals | ||
4 | + | ||
5 | +from django.db import migrations | ||
6 | + | ||
7 | + | ||
8 | +class Migration(migrations.Migration): | ||
9 | + | ||
10 | + dependencies = [ | ||
11 | + ('chat', '0003_auto_20170407_2251'), | ||
12 | + ('chat', '0003_auto_20170407_2154'), | ||
13 | + ] | ||
14 | + | ||
15 | + operations = [ | ||
16 | + ] |
file_link/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: 2017-04-11 19:18-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:13-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" |
goals/forms.py
@@ -2,8 +2,9 @@ | @@ -2,8 +2,9 @@ | ||
2 | from django import forms | 2 | from django import forms |
3 | from datetime import datetime | 3 | from datetime import datetime |
4 | from django.conf import settings | 4 | from django.conf import settings |
5 | +from django.utils.html import strip_tags | ||
5 | from django.utils.translation import ugettext_lazy as _ | 6 | from django.utils.translation import ugettext_lazy as _ |
6 | -from django.forms.models import inlineformset_factory | 7 | +from django.forms.models import inlineformset_factory, BaseInlineFormSet |
7 | 8 | ||
8 | from subjects.models import Tag | 9 | from subjects.models import Tag |
9 | 10 | ||
@@ -48,6 +49,9 @@ class GoalsForm(forms.ModelForm): | @@ -48,6 +49,9 @@ class GoalsForm(forms.ModelForm): | ||
48 | 49 | ||
49 | limit_submission_date = cleaned_data.get('limit_submission_date', None) | 50 | limit_submission_date = cleaned_data.get('limit_submission_date', None) |
50 | 51 | ||
52 | + presentation = cleaned_data.get('presentation', '') | ||
53 | + cleaned_presentation = strip_tags(presentation) | ||
54 | + | ||
51 | if self.topic: | 55 | if self.topic: |
52 | if self.instance.id: | 56 | if self.instance.id: |
53 | exist = self.topic.resource_topic.filter(goals__isnull = False).exclude(id = self.instance.id).exists() | 57 | exist = self.topic.resource_topic.filter(goals__isnull = False).exclude(id = self.instance.id).exists() |
@@ -57,6 +61,9 @@ class GoalsForm(forms.ModelForm): | @@ -57,6 +61,9 @@ class GoalsForm(forms.ModelForm): | ||
57 | if exist: | 61 | if exist: |
58 | self.add_error('name', _('There already is another resource with the goals specification for the Topic %s')%(str(self.topic))) | 62 | self.add_error('name', _('There already is another resource with the goals specification for the Topic %s')%(str(self.topic))) |
59 | 63 | ||
64 | + if cleaned_presentation == '': | ||
65 | + self.add_error('presentation', _('This field is required.')) | ||
66 | + | ||
60 | if limit_submission_date: | 67 | if limit_submission_date: |
61 | if not limit_submission_date == ValueError: | 68 | if not limit_submission_date == ValueError: |
62 | if not self.instance.id and limit_submission_date.date() < datetime.today().date(): | 69 | if not self.instance.id and limit_submission_date.date() < datetime.today().date(): |
@@ -67,6 +74,8 @@ class GoalsForm(forms.ModelForm): | @@ -67,6 +74,8 @@ class GoalsForm(forms.ModelForm): | ||
67 | 74 | ||
68 | if limit_submission_date.date() > self.subject.end_date: | 75 | if limit_submission_date.date() > self.subject.end_date: |
69 | self.add_error('limit_submission_date', _('This input should be filled with a date equal or after the subject end date.')) | 76 | self.add_error('limit_submission_date', _('This input should be filled with a date equal or after the subject end date.')) |
77 | + else: | ||
78 | + self.add_error('limit_submission_date', _('This field is required')) | ||
70 | 79 | ||
71 | return cleaned_data | 80 | return cleaned_data |
72 | 81 | ||
@@ -116,6 +125,18 @@ class GoalItemForm(forms.ModelForm): | @@ -116,6 +125,18 @@ class GoalItemForm(forms.ModelForm): | ||
116 | 125 | ||
117 | return cleaned_data | 126 | return cleaned_data |
118 | 127 | ||
128 | +class GoalItemFormset(BaseInlineFormSet): | ||
129 | + def __init__(self, *args, **kwargs): | ||
130 | + super(GoalItemFormset, self).__init__(*args, **kwargs) | ||
131 | + | ||
132 | + self.forms[0].empty_permitted = False | ||
133 | + | ||
134 | + def clean(self): | ||
135 | + description = self.forms[0].cleaned_data.get('description', None) | ||
136 | + | ||
137 | + if not description: | ||
138 | + raise forms.ValidationError(_('It\'s necessary to enter at least one goal specification.')) | ||
139 | + | ||
119 | class MyGoalsForm(forms.ModelForm): | 140 | class MyGoalsForm(forms.ModelForm): |
120 | def __init__(self, *args, **kwargs): | 141 | def __init__(self, *args, **kwargs): |
121 | super(MyGoalsForm, self).__init__(*args, **kwargs) | 142 | super(MyGoalsForm, self).__init__(*args, **kwargs) |
@@ -127,4 +148,4 @@ class MyGoalsForm(forms.ModelForm): | @@ -127,4 +148,4 @@ class MyGoalsForm(forms.ModelForm): | ||
127 | fields = ['value', 'item'] | 148 | fields = ['value', 'item'] |
128 | 149 | ||
129 | InlinePendenciesFormset = inlineformset_factory(Goals, Pendencies, form = PendenciesLimitedForm, extra = 1, max_num = 3, validate_max = True, can_delete = True) | 150 | InlinePendenciesFormset = inlineformset_factory(Goals, Pendencies, form = PendenciesLimitedForm, extra = 1, max_num = 3, validate_max = True, can_delete = True) |
130 | -InlineGoalItemFormset = inlineformset_factory(Goals, GoalItem, form = GoalItemForm, extra = 1, can_delete = True) | ||
131 | \ No newline at end of file | 151 | \ No newline at end of file |
152 | +InlineGoalItemFormset = inlineformset_factory(Goals, GoalItem, form = GoalItemForm, min_num = 1, validate_min = True, extra = 0, can_delete = True, formset = GoalItemFormset) | ||
132 | \ No newline at end of file | 153 | \ No newline at end of file |
goals/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: 2017-04-11 19:17-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:13-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,15 @@ msgstr "" | @@ -18,15 +18,15 @@ 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 | -#: goals/forms.py:33 | 21 | +#: goals/forms.py:34 |
22 | msgid "Tags" | 22 | msgid "Tags" |
23 | msgstr "Tags" | 23 | msgstr "Tags" |
24 | 24 | ||
25 | -#: goals/forms.py:39 | 25 | +#: goals/forms.py:40 |
26 | msgid "Name" | 26 | msgid "Name" |
27 | msgstr "Nome" | 27 | msgstr "Nome" |
28 | 28 | ||
29 | -#: goals/forms.py:58 | 29 | +#: goals/forms.py:62 |
30 | #, python-format | 30 | #, python-format |
31 | msgid "" | 31 | msgid "" |
32 | "There already is another resource with the goals specification for the Topic " | 32 | "There already is another resource with the goals specification for the Topic " |
@@ -34,12 +34,16 @@ msgid "" | @@ -34,12 +34,16 @@ msgid "" | ||
34 | msgstr "" | 34 | msgstr "" |
35 | "Já existe um outro recurso com a especificação de metas para o tópico %s" | 35 | "Já existe um outro recurso com a especificação de metas para o tópico %s" |
36 | 36 | ||
37 | -#: goals/forms.py:63 | 37 | +#: goals/forms.py:65 goals/forms.py:124 |
38 | +msgid "This field is required." | ||
39 | +msgstr "Esse campo é obrigatório." | ||
40 | + | ||
41 | +#: goals/forms.py:70 | ||
38 | msgid "This input should be filled with a date equal or after today's date." | 42 | msgid "This input should be filled with a date equal or after today's date." |
39 | msgstr "" | 43 | msgstr "" |
40 | "Esse campo deve ser preenchido com uma data igual ou posterior à data atual." | 44 | "Esse campo deve ser preenchido com uma data igual ou posterior à data atual." |
41 | 45 | ||
42 | -#: goals/forms.py:66 | 46 | +#: goals/forms.py:73 |
43 | msgid "" | 47 | msgid "" |
44 | "This input should be filled with a date equal or after the subject begin " | 48 | "This input should be filled with a date equal or after the subject begin " |
45 | "date." | 49 | "date." |
@@ -47,17 +51,23 @@ msgstr "" | @@ -47,17 +51,23 @@ msgstr "" | ||
47 | "Esse campo deve ser preenchido com uma data igual ou posterior à data de " | 51 | "Esse campo deve ser preenchido com uma data igual ou posterior à data de " |
48 | "início do assunto." | 52 | "início do assunto." |
49 | 53 | ||
50 | -#: goals/forms.py:69 | 54 | +#: goals/forms.py:76 |
51 | msgid "" | 55 | msgid "" |
52 | "This input should be filled with a date equal or after the subject end date." | 56 | "This input should be filled with a date equal or after the subject end date." |
53 | msgstr "" | 57 | msgstr "" |
54 | "Esse campo deve ser preenchido com uma data igual ou posterior à data final " | 58 | "Esse campo deve ser preenchido com uma data igual ou posterior à data final " |
55 | "do assunto." | 59 | "do assunto." |
56 | 60 | ||
57 | -#: goals/forms.py:115 | ||
58 | -msgid "This field is required." | 61 | +#: goals/forms.py:78 |
62 | +#, fuzzy | ||
63 | +#| msgid "This field is required." | ||
64 | +msgid "This field is required" | ||
59 | msgstr "Esse campo é obrigatório." | 65 | msgstr "Esse campo é obrigatório." |
60 | 66 | ||
67 | +#: goals/forms.py:138 | ||
68 | +msgid "It's necessary to enter at least one goal specification." | ||
69 | +msgstr "Você deve cadastrar ao menos uma especificação de meta." | ||
70 | + | ||
61 | #: goals/models.py:10 | 71 | #: goals/models.py:10 |
62 | msgid "Presentation" | 72 | msgid "Presentation" |
63 | msgstr "Apresentação" | 73 | msgstr "Apresentação" |
@@ -134,46 +144,46 @@ msgstr "Data de atualização" | @@ -134,46 +144,46 @@ msgstr "Data de atualização" | ||
134 | msgid "Goals Specification" | 144 | msgid "Goals Specification" |
135 | msgstr "Especificação de Metas" | 145 | msgstr "Especificação de Metas" |
136 | 146 | ||
137 | -#: goals/templates/goals/_form.html:101 | 147 | +#: goals/templates/goals/_form.html:109 |
138 | #: goals/templates/goals/_form_submit.html:22 | 148 | #: goals/templates/goals/_form_submit.html:22 |
139 | #: goals/templates/goals/view.html:74 | 149 | #: goals/templates/goals/view.html:74 |
140 | msgid "Minimum percentage desired" | 150 | msgid "Minimum percentage desired" |
141 | msgstr "Porcentagem mínima desejada" | 151 | msgstr "Porcentagem mínima desejada" |
142 | 152 | ||
143 | -#: goals/templates/goals/_form.html:156 | 153 | +#: goals/templates/goals/_form.html:164 |
144 | msgid "Common resources settings" | 154 | msgid "Common resources settings" |
145 | msgstr "Configurações comuns a todos os recursos" | 155 | msgstr "Configurações comuns a todos os recursos" |
146 | 156 | ||
147 | -#: goals/templates/goals/_form.html:204 | 157 | +#: goals/templates/goals/_form.html:212 |
148 | msgid "Pendencies Notifications" | 158 | msgid "Pendencies Notifications" |
149 | msgstr "Notificações de Pendências" | 159 | msgstr "Notificações de Pendências" |
150 | 160 | ||
151 | -#: goals/templates/goals/_form.html:226 | 161 | +#: goals/templates/goals/_form.html:240 |
152 | msgid "Action not performed by the user" | 162 | msgid "Action not performed by the user" |
153 | msgstr "Ação não realizada pelo usuário" | 163 | msgstr "Ação não realizada pelo usuário" |
154 | 164 | ||
155 | -#: goals/templates/goals/_form.html:252 | 165 | +#: goals/templates/goals/_form.html:266 |
156 | msgid "Wished period" | 166 | msgid "Wished period" |
157 | msgstr "Período desejado" | 167 | msgstr "Período desejado" |
158 | 168 | ||
159 | -#: goals/templates/goals/_form.html:388 | 169 | +#: goals/templates/goals/_form.html:402 |
160 | #: goals/templates/goals/_form_submit.html:54 | 170 | #: goals/templates/goals/_form_submit.html:54 |
161 | msgid "Save" | 171 | msgid "Save" |
162 | msgstr "Salvar" | 172 | msgstr "Salvar" |
163 | 173 | ||
164 | -#: goals/templates/goals/_form.html:399 | 174 | +#: goals/templates/goals/_form.html:413 |
165 | msgid "Add new goal" | 175 | msgid "Add new goal" |
166 | msgstr "Adicionar nova meta" | 176 | msgstr "Adicionar nova meta" |
167 | 177 | ||
168 | -#: goals/templates/goals/_form.html:400 | 178 | +#: goals/templates/goals/_form.html:414 |
169 | msgid "Remove this goal" | 179 | msgid "Remove this goal" |
170 | msgstr "Remover essa meta" | 180 | msgstr "Remover essa meta" |
171 | 181 | ||
172 | -#: goals/templates/goals/_form.html:420 | 182 | +#: goals/templates/goals/_form.html:434 |
173 | msgid "Add new notification" | 183 | msgid "Add new notification" |
174 | msgstr "Adicionar nova notificação" | 184 | msgstr "Adicionar nova notificação" |
175 | 185 | ||
176 | -#: goals/templates/goals/_form.html:421 | 186 | +#: goals/templates/goals/_form.html:435 |
177 | msgid "Remove this" | 187 | msgid "Remove this" |
178 | msgstr "Remover essa notificação" | 188 | msgstr "Remover essa notificação" |
179 | 189 | ||
@@ -344,35 +354,35 @@ msgstr "Suas metas para %s foram salvas com sucesso!" | @@ -344,35 +354,35 @@ msgstr "Suas metas para %s foram salvas com sucesso!" | ||
344 | msgid "Your goals for %s was update successfully!" | 354 | msgid "Your goals for %s was update successfully!" |
345 | msgstr "Suas metas para %s foram atualizadas com sucesso!" | 355 | msgstr "Suas metas para %s foram atualizadas com sucesso!" |
346 | 356 | ||
347 | -#: goals/views.py:636 goals/views.py:650 goals/views.py:671 goals/views.py:790 | ||
348 | -#: goals/views.py:804 goals/views.py:814 | 357 | +#: goals/views.py:636 goals/views.py:650 goals/views.py:675 goals/views.py:794 |
358 | +#: goals/views.py:808 goals/views.py:818 | ||
349 | msgid "Visualize" | 359 | msgid "Visualize" |
350 | msgstr "Visualizar" | 360 | msgstr "Visualizar" |
351 | 361 | ||
352 | -#: goals/views.py:636 goals/views.py:650 goals/views.py:671 goals/views.py:790 | ||
353 | -#: goals/views.py:804 goals/views.py:814 | 362 | +#: goals/views.py:636 goals/views.py:650 goals/views.py:675 goals/views.py:794 |
363 | +#: goals/views.py:808 goals/views.py:818 | ||
354 | msgid "Submit" | 364 | msgid "Submit" |
355 | msgstr "Submeter" | 365 | msgstr "Submeter" |
356 | 366 | ||
357 | -#: goals/views.py:734 | 367 | +#: goals/views.py:738 |
358 | msgid "Create Topic Goals" | 368 | msgid "Create Topic Goals" |
359 | msgstr "Adicionar Metas do Tópico" | 369 | msgstr "Adicionar Metas do Tópico" |
360 | 370 | ||
361 | -#: goals/views.py:745 | 371 | +#: goals/views.py:749 |
362 | #, python-format | 372 | #, python-format |
363 | msgid "The Goals specification for the topic %s was realized successfully!" | 373 | msgid "The Goals specification for the topic %s was realized successfully!" |
364 | msgstr "A Especificação de Metas para o tópico %s foi realizada com sucesso!" | 374 | msgstr "A Especificação de Metas para o tópico %s foi realizada com sucesso!" |
365 | 375 | ||
366 | -#: goals/views.py:869 | 376 | +#: goals/views.py:873 |
367 | msgid "Update Topic Goals" | 377 | msgid "Update Topic Goals" |
368 | msgstr "Atualizar Metas do Tópico" | 378 | msgstr "Atualizar Metas do Tópico" |
369 | 379 | ||
370 | -#: goals/views.py:880 | 380 | +#: goals/views.py:884 |
371 | #, python-format | 381 | #, python-format |
372 | msgid "The Goals specification for the topic %s was updated successfully!" | 382 | msgid "The Goals specification for the topic %s was updated successfully!" |
373 | msgstr "A Especificação de Metas para o tópico %s foi atualizada com sucesso!" | 383 | msgstr "A Especificação de Metas para o tópico %s foi atualizada com sucesso!" |
374 | 384 | ||
375 | -#: goals/views.py:916 | 385 | +#: goals/views.py:920 |
376 | #, python-format | 386 | #, python-format |
377 | msgid "The Goals specification of the topic %s was removed successfully!" | 387 | msgid "The Goals specification of the topic %s was removed successfully!" |
378 | msgstr "A Especificação de Metas para o tópico %s foi removida com sucesso!" | 388 | msgstr "A Especificação de Metas para o tópico %s foi removida com sucesso!" |
goals/templates/goals/_form.html
@@ -61,7 +61,15 @@ | @@ -61,7 +61,15 @@ | ||
61 | </div> | 61 | </div> |
62 | <div id="goal_items" class="panel-collapse collapse"> | 62 | <div id="goal_items" class="panel-collapse collapse"> |
63 | {{ goalitems_form.management_form }} | 63 | {{ goalitems_form.management_form }} |
64 | - {{ goalitems_form.non_form_errors }} | 64 | + |
65 | + {% if goalitems_form.non_form_errors %} | ||
66 | + <div class="alert alert-danger alert-dismissible" role="alert"> | ||
67 | + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | ||
68 | + <span aria-hidden="true">×</span> | ||
69 | + </button> | ||
70 | + {{ goalitems_form.non_form_errors }} | ||
71 | + </div> | ||
72 | + {% endif %} | ||
65 | 73 | ||
66 | {% for item in goalitems_form %} | 74 | {% for item in goalitems_form %} |
67 | <div class="goalitems"> | 75 | <div class="goalitems"> |
@@ -209,12 +217,18 @@ | @@ -209,12 +217,18 @@ | ||
209 | </div> | 217 | </div> |
210 | <div id="notifications" class="panel-collapse collapse"> | 218 | <div id="notifications" class="panel-collapse collapse"> |
211 | {{ pendencies_form.management_form }} | 219 | {{ pendencies_form.management_form }} |
212 | - {{ pendencies_form.non_form_errors }} | 220 | + {% if pendencies_form.non_form_errors %} |
221 | + <div class="alert alert-danger alert-dismissible" role="alert"> | ||
222 | + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | ||
223 | + <span aria-hidden="true">×</span> | ||
224 | + </button> | ||
225 | + {{ pendencies_form.non_form_errors }} | ||
226 | + </div> | ||
227 | + {% endif %} | ||
213 | 228 | ||
214 | {% for notify in pendencies_form %} | 229 | {% for notify in pendencies_form %} |
215 | <div class="notifies"> | 230 | <div class="notifies"> |
216 | <div style="text-align:left"> | 231 | <div style="text-align:left"> |
217 | - {{ notify.errors }} | ||
218 | {% render_field notify.id %} | 232 | {% render_field notify.id %} |
219 | {% render_field notify.resource %} | 233 | {% render_field notify.resource %} |
220 | {% render_field notify.subject class='pend_subj' %} | 234 | {% render_field notify.subject class='pend_subj' %} |
goals/views.py
@@ -667,7 +667,11 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView): | @@ -667,7 +667,11 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView): | ||
667 | return initial | 667 | return initial |
668 | 668 | ||
669 | def form_invalid(self, form, pendencies_form, goalitems_form): | 669 | def form_invalid(self, form, pendencies_form, goalitems_form): |
670 | + slug = self.kwargs.get('slug', '') | ||
671 | + topic = get_object_or_404(Topic, slug = slug) | ||
672 | + | ||
670 | for p_form in pendencies_form.forms: | 673 | for p_form in pendencies_form.forms: |
674 | + print(p_form.initial['subject']) | ||
671 | p_form.fields['action'].choices = [("", "-------"),("view", _("Visualize")), ("submit", _("Submit"))] | 675 | p_form.fields['action'].choices = [("", "-------"),("view", _("Visualize")), ("submit", _("Submit"))] |
672 | 676 | ||
673 | return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form, goalitems_form = goalitems_form)) | 677 | return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form, goalitems_form = goalitems_form)) |
links/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: 2017-04-11 19:17-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:13-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" |
log/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: 2017-04-11 19:18-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:13-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" |
mailsender/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: 2017-04-11 19:17-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:12-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" |
mural/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: 2017-04-11 19:17-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:13-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" |
news/forms.py
@@ -3,10 +3,50 @@ from django.utils.translation import ugettext_lazy as _ | @@ -3,10 +3,50 @@ from django.utils.translation import ugettext_lazy as _ | ||
3 | 3 | ||
4 | from .models import News | 4 | from .models import News |
5 | from resubmit.widgets import ResubmitFileWidget | 5 | from resubmit.widgets import ResubmitFileWidget |
6 | - | 6 | +from os.path import join |
7 | +from PIL import Image | ||
8 | +import os | ||
9 | +from amadeus import settings | ||
7 | 10 | ||
8 | class NewsForm(forms.ModelForm): | 11 | class NewsForm(forms.ModelForm): |
9 | MAX_UPLOAD_SIZE = 5*1024*1024 | 12 | MAX_UPLOAD_SIZE = 5*1024*1024 |
13 | + | ||
14 | + #Cropping image | ||
15 | + x = forms.FloatField(widget=forms.HiddenInput(),required=False) | ||
16 | + y = forms.FloatField(widget=forms.HiddenInput(),required=False) | ||
17 | + width = forms.FloatField(widget=forms.HiddenInput(),required=False) | ||
18 | + height = forms.FloatField(widget=forms.HiddenInput(),required=False) | ||
19 | + | ||
20 | + def save(self, commit=True): | ||
21 | + super(NewsForm, self).save(commit=False) | ||
22 | + self.deletepath = "" | ||
23 | + | ||
24 | + x = self.cleaned_data.get('x') | ||
25 | + y = self.cleaned_data.get('y') | ||
26 | + w = self.cleaned_data.get('width') | ||
27 | + h = self.cleaned_data.get('height') | ||
28 | + | ||
29 | + if self.instance.image : | ||
30 | + image = Image.open(self.instance.image) | ||
31 | + if not x is None: | ||
32 | + cropped_image = image.crop((x, y, w+x, h+y)) | ||
33 | + resized_image = cropped_image.resize((700, 200), Image.ANTIALIAS) | ||
34 | + | ||
35 | + folder_path = join(settings.MEDIA_ROOT, 'news') | ||
36 | + #check if the folder already exists | ||
37 | + if not os.path.isdir(folder_path): | ||
38 | + os.makedirs(folder_path) | ||
39 | + | ||
40 | + if ("news" not in self.instance.image.path): | ||
41 | + self.deletepath = self.instance.image.path | ||
42 | + | ||
43 | + resized_image.save(self.instance.image.path) | ||
44 | + | ||
45 | + self.instance.save() | ||
46 | + if (self.deletepath): | ||
47 | + os.remove(self.deletepath) | ||
48 | + return self.instance | ||
49 | + | ||
10 | class Meta: | 50 | class Meta: |
11 | model = News | 51 | model = News |
12 | fields = ['title','image','content'] | 52 | fields = ['title','image','content'] |
news/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: 2017-04-11 19:18-0300\n" | 11 | +"POT-Creation-Date: 2017-04-17 12:04-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,104 +18,131 @@ msgstr "" | @@ -18,104 +18,131 @@ 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 | -#: news/forms.py:22 | 21 | +#: .\forms.py:62 |
22 | msgid "This field is required" | 22 | msgid "This field is required" |
23 | msgstr "Este campo é obrigatório." | 23 | msgstr "Este campo é obrigatório." |
24 | 24 | ||
25 | -#: news/forms.py:33 | 25 | +#: .\forms.py:73 |
26 | msgid "The image is too large. It should have less than 5MB." | 26 | msgid "The image is too large. It should have less than 5MB." |
27 | msgstr "A imagem é muito grande. Ela deve ter menos que 5MB." | 27 | msgstr "A imagem é muito grande. Ela deve ter menos que 5MB." |
28 | 28 | ||
29 | -#: news/forms.py:36 | 29 | +#: .\forms.py:76 |
30 | msgid "This field is required." | 30 | msgid "This field is required." |
31 | msgstr "Este campo é obrigatório." | 31 | msgstr "Este campo é obrigatório." |
32 | 32 | ||
33 | -#: news/models.py:15 | 33 | +#: .\models.py:15 |
34 | msgid "File not supported." | 34 | msgid "File not supported." |
35 | msgstr "Arquivo não suportado" | 35 | msgstr "Arquivo não suportado" |
36 | 36 | ||
37 | -#: news/models.py:18 | 37 | +#: .\models.py:18 |
38 | msgid "Title" | 38 | msgid "Title" |
39 | msgstr "Título" | 39 | msgstr "Título" |
40 | 40 | ||
41 | -#: news/models.py:19 | 41 | +#: .\models.py:19 |
42 | msgid "Slug" | 42 | msgid "Slug" |
43 | msgstr "" | 43 | msgstr "" |
44 | 44 | ||
45 | -#: news/models.py:20 | 45 | +#: .\models.py:20 |
46 | msgid "News Image" | 46 | msgid "News Image" |
47 | msgstr "Imagem de apresentação da notícia" | 47 | msgstr "Imagem de apresentação da notícia" |
48 | 48 | ||
49 | -#: news/models.py:21 | 49 | +#: .\models.py:21 |
50 | msgid "News Content" | 50 | msgid "News Content" |
51 | msgstr "Conteúdo da notícia" | 51 | msgstr "Conteúdo da notícia" |
52 | 52 | ||
53 | -#: news/models.py:22 | 53 | +#: .\models.py:22 |
54 | msgid "Create Date" | 54 | msgid "Create Date" |
55 | msgstr "Data de criação" | 55 | msgstr "Data de criação" |
56 | 56 | ||
57 | -#: news/models.py:23 | 57 | +#: .\models.py:23 |
58 | msgid "Creator" | 58 | msgid "Creator" |
59 | msgstr "Autor" | 59 | msgstr "Autor" |
60 | 60 | ||
61 | -#: news/models.py:25 news/models.py:26 | 61 | +#: .\models.py:25 .\models.py:26 |
62 | msgid "News" | 62 | msgid "News" |
63 | msgstr "Notícia" | 63 | msgstr "Notícia" |
64 | 64 | ||
65 | -#: news/templates/news/_form.html:12 | 65 | +#: .\templates\news\_form.html:12 |
66 | msgid "Choose your photo..." | 66 | msgid "Choose your photo..." |
67 | msgstr "Escolha a foto" | 67 | msgstr "Escolha a foto" |
68 | 68 | ||
69 | -#: news/templates/news/_form.html:59 | 69 | +#: .\templates\news\_form.html:60 |
70 | msgid "Save" | 70 | msgid "Save" |
71 | msgstr "Salvar" | 71 | msgstr "Salvar" |
72 | 72 | ||
73 | -#: news/templates/news/_form.html:62 | 73 | +#: .\templates\news\_form.html:63 |
74 | msgid "Cancel" | 74 | msgid "Cancel" |
75 | msgstr "Cancelar" | 75 | msgstr "Cancelar" |
76 | 76 | ||
77 | -#: news/templates/news/create.html:7 | 77 | +#: .\templates\news\create.html:7 |
78 | msgid "Register News" | 78 | msgid "Register News" |
79 | msgstr "Cadastrar notícia" | 79 | msgstr "Cadastrar notícia" |
80 | 80 | ||
81 | -#: news/templates/news/list.html:7 news/views.py:47 | 81 | +#: .\templates\news\delete.html:12 |
82 | +msgid "Are you sure you want to delete the news" | ||
83 | +msgstr "Você tem certeza que deseja apagar a notícia" | ||
84 | + | ||
85 | +#: .\templates\news\delete.html:12 | ||
86 | +msgid "All its data will be lost and can't be recovered" | ||
87 | +msgstr "Todos seus dados serão perdidos e não podem ser recuperados" | ||
88 | + | ||
89 | +#: .\templates\news\delete.html:18 | ||
90 | +msgid "Close" | ||
91 | +msgstr "Cancelar" | ||
92 | + | ||
93 | +#: .\templates\news\delete.html:19 .\templates\news\list.html:60 | ||
94 | +#: .\templates\news\search.html:60 | ||
95 | +msgid "Delete" | ||
96 | +msgstr "Apagar" | ||
97 | + | ||
98 | +#: .\templates\news\list.html:7 .\views.py:47 | ||
82 | msgid "Manage News" | 99 | msgid "Manage News" |
83 | msgstr "Gerenciar notícias" | 100 | msgstr "Gerenciar notícias" |
84 | 101 | ||
85 | -#: news/templates/news/list.html:34 | ||
86 | -msgid "Search..." | ||
87 | -msgstr "" | 102 | +#: .\templates\news\list.html:34 .\templates\news\search.html:34 |
103 | +msgid "Search by title, author or date" | ||
104 | +msgstr "Pesquisar por título, autor ou data" | ||
88 | 105 | ||
89 | -#: news/templates/news/list.html:45 news/views.py:74 | 106 | +#: .\templates\news\list.html:45 .\templates\news\search.html:45 .\views.py:74 |
90 | msgid "Create News" | 107 | msgid "Create News" |
91 | msgstr "Criar notícia" | 108 | msgstr "Criar notícia" |
92 | 109 | ||
93 | -#: news/templates/news/list.html:59 | 110 | +#: .\templates\news\list.html:59 .\templates\news\search.html:59 |
94 | msgid "Edit" | 111 | msgid "Edit" |
95 | -msgstr "" | 112 | +msgstr "Editar" |
96 | 113 | ||
97 | -#: news/templates/news/list.html:60 | ||
98 | -msgid "Delete" | ||
99 | -msgstr "" | ||
100 | - | ||
101 | -#: news/templates/news/list.html:71 | 114 | +#: .\templates\news\list.html:71 .\templates\news\search.html:71 |
102 | msgid "No news found" | 115 | msgid "No news found" |
103 | -msgstr "" | 116 | +msgstr "Nenhuma notícia encontrada" |
104 | 117 | ||
105 | -#: news/templates/news/update.html:7 news/views.py:92 | ||
106 | -#, fuzzy | ||
107 | -#| msgid "Create News" | 118 | +#: .\templates\news\search.html:7 .\views.py:142 |
119 | +msgid "Search News" | ||
120 | +msgstr "Pesquisar Notícia" | ||
121 | + | ||
122 | +#: .\templates\news\update.html:7 .\views.py:92 | ||
108 | msgid "Update News" | 123 | msgid "Update News" |
109 | -msgstr "Criar notícia" | 124 | +msgstr "Atualizar Notícia" |
110 | 125 | ||
111 | -#: news/views.py:22 | 126 | +#: .\templates\news\view.html:32 |
127 | +msgid "Print News" | ||
128 | +msgstr "Imprimir Notícia" | ||
129 | + | ||
130 | +#: .\views.py:22 | ||
112 | msgid "Visualize News" | 131 | msgid "Visualize News" |
113 | -msgstr "" | 132 | +msgstr "Visualizar Notícia" |
114 | 133 | ||
115 | -#: news/views.py:68 news/views.py:86 | 134 | +#: .\views.py:68 .\views.py:86 |
116 | msgid "News successfully created!" | 135 | msgid "News successfully created!" |
117 | msgstr "Notícia criada com sucesso" | 136 | msgstr "Notícia criada com sucesso" |
118 | 137 | ||
138 | +#: .\views.py:159 | ||
139 | +msgid "News \"%s\" removed successfully!" | ||
140 | +msgstr "Notícia \"%s\" removida com sucesso" | ||
141 | + | ||
142 | +#: .\views.py:166 | ||
143 | +msgid "Delete News" | ||
144 | +msgstr "Apagar Notícia" | ||
145 | + | ||
119 | #~ msgid "Create news" | 146 | #~ msgid "Create news" |
120 | #~ msgstr "Criar notícia" | 147 | #~ msgstr "Criar notícia" |
121 | 148 |
@@ -0,0 +1,26 @@ | @@ -0,0 +1,26 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10.4 on 2017-04-13 23:34 | ||
3 | +from __future__ import unicode_literals | ||
4 | + | ||
5 | +from django.db import migrations, models | ||
6 | +import news.models | ||
7 | + | ||
8 | + | ||
9 | +class Migration(migrations.Migration): | ||
10 | + | ||
11 | + dependencies = [ | ||
12 | + ('news', '0001_initial'), | ||
13 | + ] | ||
14 | + | ||
15 | + operations = [ | ||
16 | + migrations.AlterField( | ||
17 | + model_name='news', | ||
18 | + name='image', | ||
19 | + field=models.ImageField(blank=True, upload_to='news/', validators=[news.models.validate_img_extension], verbose_name='News Image'), | ||
20 | + ), | ||
21 | + migrations.AlterField( | ||
22 | + model_name='news', | ||
23 | + name='title', | ||
24 | + field=models.CharField(max_length=200, unique=True, verbose_name='Title'), | ||
25 | + ), | ||
26 | + ] |
news/templates/news/_form.html
@@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
9 | <label for="{{ field.auto_id }}">{{ field.label }} <span>*</span></label> | 9 | <label for="{{ field.auto_id }}">{{ field.label }} <span>*</span></label> |
10 | {% render_field field class='form-control' %} | 10 | {% render_field field class='form-control' %} |
11 | <div class="input-group"> | 11 | <div class="input-group"> |
12 | - <input type="text" readonly="" class="form-control" placeholder="{% trans 'Choose your photo...' %}"> | 12 | + <input type="text" readonly="" class="form-control" id="pic_holder" placeholder="{% trans 'Choose your photo...' %}"> |
13 | <span class="input-group-btn input-group-sm"> | 13 | <span class="input-group-btn input-group-sm"> |
14 | <button type="button" class="btn btn-fab btn-fab-mini"> | 14 | <button type="button" class="btn btn-fab btn-fab-mini"> |
15 | <i class="material-icons">image</i> | 15 | <i class="material-icons">image</i> |
@@ -27,11 +27,12 @@ | @@ -27,11 +27,12 @@ | ||
27 | {% endif %} | 27 | {% endif %} |
28 | {% render_field field class='form-control text_wysiwyg' %} | 28 | {% render_field field class='form-control text_wysiwyg' %} |
29 | {% else %} | 29 | {% else %} |
30 | - {% if field.field.required %} | ||
31 | - <label for="{{ field.auto_id }}">{{ field.label }} <span>*</span></label> | ||
32 | - {% else %} | ||
33 | - <label for="{{ field.auto_id }}">{{ field.label }}</label> | ||
34 | 30 | ||
31 | + {% if field.auto_id == 'id_title' %} | ||
32 | + {% if field.field.required %} | ||
33 | + <label for="{{ field.auto_id }}">{{ field.label }} <span>*</span></label> | ||
34 | + {% else %} | ||
35 | + {% endif %} | ||
35 | {% endif %} | 36 | {% endif %} |
36 | {% render_field field class='form-control' %} | 37 | {% render_field field class='form-control' %} |
37 | 38 | ||
@@ -65,3 +66,4 @@ | @@ -65,3 +66,4 @@ | ||
65 | </div> | 66 | </div> |
66 | 67 | ||
67 | </form> | 68 | </form> |
69 | +{% include 'users/modal_crop.html' %} |
@@ -0,0 +1,23 @@ | @@ -0,0 +1,23 @@ | ||
1 | +{% load static i18n permission_tags %} | ||
2 | + | ||
3 | +<!-- Modal (remember to change the ids!!!) --> | ||
4 | +<div class="modal fade" id="news" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> | ||
5 | + <div class="modal-dialog" role="document"> | ||
6 | + <div class="modal-content"> | ||
7 | + <!-- Modal Body --> | ||
8 | + <div class="modal-body"> | ||
9 | + <!-- Put ONLY your content here!!! --> | ||
10 | + <form id="delete_form" action="{% url 'news:delete' new.slug %}" method="post"> | ||
11 | + {% csrf_token %} | ||
12 | + <p>{% trans 'Are you sure you want to delete the news' %} "{{new.title}}"? {% trans "All its data will be lost and can't be recovered" %}</p> | ||
13 | + </form> | ||
14 | + </div> | ||
15 | + <!-- Modal Footer --> | ||
16 | + <div id="delete-category-footer"class="modal-footer"> | ||
17 | + <!-- Don't remove that!!! --> | ||
18 | + <button type="button" class="btn btn-default btn-raised" data-dismiss="modal">{% trans "Close" %}</button> | ||
19 | + <button type="submit" id="button" form="delete_form" class="btn btn-success btn-raised erase-button">{% trans "Delete" %}</button> | ||
20 | + </div> | ||
21 | + </div> | ||
22 | + </div> | ||
23 | +</div> |
news/templates/news/list.html
@@ -28,10 +28,10 @@ | @@ -28,10 +28,10 @@ | ||
28 | 28 | ||
29 | <div class="row"> | 29 | <div class="row"> |
30 | <div class="col-md-9"> | 30 | <div class="col-md-9"> |
31 | - <form action="{% url 'users:search' %}" method="GET" class="form-horizontal"> | 31 | + <form action="{% url 'news:search' %}" method="GET" class="form-horizontal"> |
32 | <div class="form-group"> | 32 | <div class="form-group"> |
33 | <div class="col-md-11 col-sm-11 col-xs-11"> | 33 | <div class="col-md-11 col-sm-11 col-xs-11"> |
34 | - <input type="text" class="form-control" name="search" placeholder="{% trans 'Search...' %}" /> | 34 | + <input type="text" class="form-control" name="search" placeholder="{% trans 'Search by title, author or date' %}" /> |
35 | </div> | 35 | </div> |
36 | <div class="col-md-1 col-sm-1 col-xs-1"> | 36 | <div class="col-md-1 col-sm-1 col-xs-1"> |
37 | <button type="submit" class="btn btn-fab btn-fab-mini"> | 37 | <button type="submit" class="btn btn-fab btn-fab-mini"> |
@@ -57,7 +57,7 @@ | @@ -57,7 +57,7 @@ | ||
57 | <div class="col-md-6"> | 57 | <div class="col-md-6"> |
58 | <div align="right"> | 58 | <div align="right"> |
59 | <a href="{% url 'news:update' new.slug %}" class="btn btn-success btn-raised btn-sm"><i class="fa fa-edit"></i> {% trans 'Edit' %}</a> | 59 | <a href="{% url 'news:update' new.slug %}" class="btn btn-success btn-raised btn-sm"><i class="fa fa-edit"></i> {% trans 'Edit' %}</a> |
60 | - <a href="" class="btn btn-default btn-raised btn-sm"><i class="fa fa-trash"></i> {% trans 'Delete' %}</a> | 60 | + <a href="javascript:delete_news.get('{% url 'news:delete' new.slug %}','#news','#modal_remove')" class="btn btn-default btn-raised btn-sm" class="btn btn-default btn-raised btn-sm"><i class="fa fa-trash"></i> {% trans 'Delete' %}</a> |
61 | </div> | 61 | </div> |
62 | </div> | 62 | </div> |
63 | </div> | 63 | </div> |
@@ -75,5 +75,21 @@ | @@ -75,5 +75,21 @@ | ||
75 | <div id="modal_remove"> | 75 | <div id="modal_remove"> |
76 | 76 | ||
77 | </div> | 77 | </div> |
78 | +<script type="text/javascript"> | ||
79 | +var delete_news = { | ||
80 | + get: function (url, id_modal, id_div_modal){ | ||
81 | + $.get(url, function(data){ | ||
82 | + if($(id_modal).length){ | ||
83 | + $(id_div_modal).empty(); | ||
84 | + $(id_div_modal).append(data); | ||
85 | + } else { | ||
86 | + $(id_div_modal).append(data); | ||
87 | + } | ||
88 | + $(id_modal).modal('show'); | ||
89 | + }); | ||
90 | + } | ||
91 | +}; | ||
92 | + | ||
93 | +</script> | ||
78 | 94 | ||
79 | {% endblock %} | 95 | {% endblock %} |
@@ -0,0 +1,79 @@ | @@ -0,0 +1,79 @@ | ||
1 | +{% extends 'news/list.html' %} | ||
2 | + | ||
3 | +{% load static i18n django_bootstrap_breadcrumbs permission_tags pagination %} | ||
4 | + | ||
5 | +{% block breadcrumbs %} | ||
6 | + {{ block.super }} | ||
7 | + {% trans 'Search News' as search_news %} | ||
8 | + {% breadcrumb search_news 'news:search' %} | ||
9 | +{% endblock %} | ||
10 | + | ||
11 | +{% block render_breadcrumbs %} | ||
12 | + {% render_breadcrumbs %} | ||
13 | +{% endblock %} | ||
14 | + | ||
15 | +{% block content %} | ||
16 | + | ||
17 | +{% if messages %} | ||
18 | + {% for message in messages %} | ||
19 | + <script type="text/javascript"> | ||
20 | + {% if message.tags == "danger" %} | ||
21 | + alertify.error('{{message}}'); | ||
22 | + {% else %} | ||
23 | + alertify.success('{{message}}'); | ||
24 | + {% endif %} | ||
25 | + </script> | ||
26 | + {% endfor %} | ||
27 | +{% endif %} | ||
28 | + | ||
29 | +<div class="row"> | ||
30 | + <div class="col-md-9"> | ||
31 | + <form action="{% url 'news:search' %}" method="GET" class="form-horizontal"> | ||
32 | + <div class="form-group"> | ||
33 | + <div class="col-md-11 col-sm-11 col-xs-11"> | ||
34 | + <input type="text" class="form-control" name="search" placeholder="{% trans 'Search by title, author or date' %}" /> | ||
35 | + </div> | ||
36 | + <div class="col-md-1 col-sm-1 col-xs-1"> | ||
37 | + <button type="submit" class="btn btn-fab btn-fab-mini"> | ||
38 | + <i class="fa fa-search"></i> | ||
39 | + </button> | ||
40 | + </div> | ||
41 | + </div> | ||
42 | + </form> | ||
43 | + </div> | ||
44 | + <div class="col-md-3"> | ||
45 | + <a href="{% url 'news:create' %}" class="pull-right btn btn-success btn-raised btn-md"><i class="fa fa-plus"></i> {% trans 'Create News' %}</a> | ||
46 | + </div> | ||
47 | +</div> | ||
48 | + | ||
49 | +{% if news %} | ||
50 | + {% for new in news %} | ||
51 | + <div class="row-fluid panel panel-default"> | ||
52 | + <div class="panel-body"> | ||
53 | + <div class="col-md-6"> | ||
54 | + <a href="{% url 'news:view' new.slug %}"><h3> <b>{{ new }}</b> </h3></a> | ||
55 | + <p>{{ new.creator}}, em {{ new.create_date }}</p> | ||
56 | + </div> | ||
57 | + <div class="col-md-6"> | ||
58 | + <div align="right"> | ||
59 | + <a href="{% url 'news:update' new.slug %}" class="btn btn-success btn-raised btn-sm"><i class="fa fa-edit"></i> {% trans 'Edit' %}</a> | ||
60 | + <a href="" class="btn btn-default btn-raised btn-sm"><i class="fa fa-trash"></i> {% trans 'Delete' %}</a> | ||
61 | + </div> | ||
62 | + </div> | ||
63 | + </div> | ||
64 | + | ||
65 | + </div> | ||
66 | + {% endfor %} | ||
67 | + {% pagination request paginator page_obj %} | ||
68 | +{% else %} | ||
69 | + <div class="row"> | ||
70 | + <div class="col-md-12 col-sm-12 col-xs-12"> | ||
71 | + <p>{% trans 'No news found' %}</p> | ||
72 | + </div> | ||
73 | + </div> | ||
74 | +{% endif %} | ||
75 | +<div id="modal_remove"> | ||
76 | + | ||
77 | +</div> | ||
78 | + | ||
79 | +{% endblock %} |
news/urls.py
@@ -6,5 +6,7 @@ urlpatterns = [ | @@ -6,5 +6,7 @@ urlpatterns = [ | ||
6 | url(r'^view/(?P<slug>[\w_-]+)/$', views.VisualizeNews.as_view(), name = 'view'), | 6 | url(r'^view/(?P<slug>[\w_-]+)/$', views.VisualizeNews.as_view(), name = 'view'), |
7 | url(r'^create/$', views.CreateNewsView.as_view(), name='create'), | 7 | url(r'^create/$', views.CreateNewsView.as_view(), name='create'), |
8 | url(r'^update/(?P<slug>[\w_-]+)/$', views.UpdateNewsView.as_view(), name = 'update'), | 8 | url(r'^update/(?P<slug>[\w_-]+)/$', views.UpdateNewsView.as_view(), name = 'update'), |
9 | + url(r'^search/$', views.SearchNewsView.as_view(), name = 'search'), | ||
10 | + url(r'^delete/(?P<slug>[\w_-]+)/$', views.DeleteNewsView.as_view(), name='delete'), | ||
9 | 11 | ||
10 | ] | 12 | ] |
news/views.py
1 | -from django.shortcuts import render | 1 | +from django.shortcuts import get_object_or_404, redirect, render |
2 | from django.views import generic | 2 | from django.views import generic |
3 | from django.contrib.auth.mixins import LoginRequiredMixin | 3 | from django.contrib.auth.mixins import LoginRequiredMixin |
4 | from log.models import Log | 4 | from log.models import Log |
@@ -6,12 +6,17 @@ from log.mixins import LogMixin | @@ -6,12 +6,17 @@ from log.mixins import LogMixin | ||
6 | from django.core.urlresolvers import reverse, reverse_lazy | 6 | from django.core.urlresolvers import reverse, reverse_lazy |
7 | from django.contrib import messages | 7 | from django.contrib import messages |
8 | from django.utils.translation import ugettext_lazy as _ | 8 | from django.utils.translation import ugettext_lazy as _ |
9 | - | 9 | +from django.db.models import Q, Count |
10 | 10 | ||
11 | from .models import News | 11 | from .models import News |
12 | from .forms import NewsForm | 12 | from .forms import NewsForm |
13 | 13 | ||
14 | class VisualizeNews(LoginRequiredMixin,LogMixin,generic.ListView): | 14 | class VisualizeNews(LoginRequiredMixin,LogMixin,generic.ListView): |
15 | + log_action = "view_new" | ||
16 | + log_resource = "news" | ||
17 | + log_component = "news" | ||
18 | + log_context = {} | ||
19 | + | ||
15 | login_url = reverse_lazy("users:login") | 20 | login_url = reverse_lazy("users:login") |
16 | redirect_field_name = 'next' | 21 | redirect_field_name = 'next' |
17 | template_name = 'news/view.html' | 22 | template_name = 'news/view.html' |
@@ -27,9 +32,20 @@ class VisualizeNews(LoginRequiredMixin,LogMixin,generic.ListView): | @@ -27,9 +32,20 @@ class VisualizeNews(LoginRequiredMixin,LogMixin,generic.ListView): | ||
27 | slug = self.kwargs.get('slug', '') | 32 | slug = self.kwargs.get('slug', '') |
28 | new = News.objects.get(slug=slug) | 33 | new = News.objects.get(slug=slug) |
29 | 34 | ||
35 | + self.log_context['new_title'] = new.title | ||
36 | + self.log_context['new_slug'] = new.slug | ||
37 | + | ||
38 | + super(VisualizeNews, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
39 | + | ||
30 | return new | 40 | return new |
31 | 41 | ||
32 | class ListNewsView(LoginRequiredMixin,LogMixin,generic.ListView): | 42 | class ListNewsView(LoginRequiredMixin,LogMixin,generic.ListView): |
43 | + log_action = "view_list_of_news" | ||
44 | + log_resource = "news" | ||
45 | + log_component = "news" | ||
46 | + log_context = {} | ||
47 | + | ||
48 | + | ||
33 | login_url = reverse_lazy("users:login") | 49 | login_url = reverse_lazy("users:login") |
34 | redirect_field_name = 'next' | 50 | redirect_field_name = 'next' |
35 | 51 | ||
@@ -46,10 +62,17 @@ class ListNewsView(LoginRequiredMixin,LogMixin,generic.ListView): | @@ -46,10 +62,17 @@ class ListNewsView(LoginRequiredMixin,LogMixin,generic.ListView): | ||
46 | context = super(ListNewsView, self).get_context_data(**kwargs) | 62 | context = super(ListNewsView, self).get_context_data(**kwargs) |
47 | context['title'] = _('Manage News') | 63 | context['title'] = _('Manage News') |
48 | 64 | ||
65 | + super(ListNewsView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
66 | + | ||
49 | return context | 67 | return context |
50 | 68 | ||
51 | 69 | ||
52 | class CreateNewsView(LoginRequiredMixin,LogMixin,generic.edit.CreateView): | 70 | class CreateNewsView(LoginRequiredMixin,LogMixin,generic.edit.CreateView): |
71 | + log_action = "create" | ||
72 | + log_resource = "news" | ||
73 | + log_component = "news" | ||
74 | + log_context = {} | ||
75 | + | ||
53 | login_url = reverse_lazy("users:login") | 76 | login_url = reverse_lazy("users:login") |
54 | redirect_field_name = 'next' | 77 | redirect_field_name = 'next' |
55 | template_name = 'news/create.html' | 78 | template_name = 'news/create.html' |
@@ -62,6 +85,13 @@ class CreateNewsView(LoginRequiredMixin,LogMixin,generic.edit.CreateView): | @@ -62,6 +85,13 @@ class CreateNewsView(LoginRequiredMixin,LogMixin,generic.edit.CreateView): | ||
62 | 85 | ||
63 | self.object.save() | 86 | self.object.save() |
64 | 87 | ||
88 | + self.log_context['new_creator_user'] = self.object.creator.get_short_name() | ||
89 | + self.log_context['new_title'] = self.object.title | ||
90 | + self.log_context['new_slug'] = self.object.slug | ||
91 | + | ||
92 | + super(CreateNewsView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
93 | + | ||
94 | + | ||
65 | return super(CreateNewsView, self).form_valid(form) | 95 | return super(CreateNewsView, self).form_valid(form) |
66 | 96 | ||
67 | def get_success_url(self): | 97 | def get_success_url(self): |
@@ -76,28 +106,118 @@ class CreateNewsView(LoginRequiredMixin,LogMixin,generic.edit.CreateView): | @@ -76,28 +106,118 @@ class CreateNewsView(LoginRequiredMixin,LogMixin,generic.edit.CreateView): | ||
76 | return context | 106 | return context |
77 | 107 | ||
78 | class UpdateNewsView(LoginRequiredMixin,LogMixin,generic.UpdateView): | 108 | class UpdateNewsView(LoginRequiredMixin,LogMixin,generic.UpdateView): |
79 | - login_url = reverse_lazy("users:login") | ||
80 | - redirect_field_name = 'next' | ||
81 | - template_name = 'news/update.html' | ||
82 | - form_class = NewsForm | ||
83 | - model = News | 109 | + log_action = "update" |
110 | + log_resource = "news" | ||
111 | + log_component = "news" | ||
112 | + log_context = {} | ||
84 | 113 | ||
85 | - def get_success_url(self): | ||
86 | - messages.success(self.request, _('News successfully created!')) | 114 | + login_url = reverse_lazy("users:login") |
115 | + redirect_field_name = 'next' | ||
116 | + template_name = 'news/update.html' | ||
117 | + form_class = NewsForm | ||
118 | + model = News | ||
87 | 119 | ||
88 | - return reverse_lazy('news:view', kwargs = {'slug': self.object.slug} ) | 120 | + def get_success_url(self): |
121 | + messages.success(self.request, _('News successfully created!')) | ||
89 | 122 | ||
90 | - def get_context_data (self, **kwargs): | ||
91 | - context = super(UpdateNewsView, self).get_context_data(**kwargs) | ||
92 | - context['title'] = _("Update News") | 123 | + return reverse_lazy('news:view', kwargs = {'slug': self.object.slug} ) |
93 | 124 | ||
94 | - return context | 125 | + def get_context_data (self, **kwargs): |
126 | + context = super(UpdateNewsView, self).get_context_data(**kwargs) | ||
127 | + context['title'] = _("Update News") | ||
95 | 128 | ||
96 | - def form_valid(self, form): | ||
97 | - self.object = form.save(commit = False) | ||
98 | - creator = self.request.user | ||
99 | - self.object.creator = creator | 129 | + return context |
100 | 130 | ||
101 | - self.object.save() | 131 | + def form_valid(self, form): |
132 | + self.object = form.save(commit = False) | ||
133 | + creator = self.request.user | ||
134 | + self.object.creator = creator | ||
102 | 135 | ||
103 | - return super(UpdateNewsView, self).form_valid(form) | 136 | + self.object.save() |
137 | + | ||
138 | + self.log_context['new_update_user'] = self.object.creator.get_short_name() | ||
139 | + self.log_context['new_title'] = self.object.title | ||
140 | + self.log_context['new_slug'] = self.object.slug | ||
141 | + | ||
142 | + super(UpdateNewsView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
143 | + | ||
144 | + | ||
145 | + return super(UpdateNewsView, self).form_valid(form) | ||
146 | + | ||
147 | +class SearchNewsView(LoginRequiredMixin, LogMixin, generic.ListView): | ||
148 | + login_url = reverse_lazy("users:login") | ||
149 | + redirect_field_name = 'next' | ||
150 | + | ||
151 | + template_name = 'news/search.html' | ||
152 | + context_object_name = 'news' | ||
153 | + paginate_by = 10 | ||
154 | + | ||
155 | + def dispatch(self, request, *args, **kwargs): | ||
156 | + search = self.request.GET.get('search', '') | ||
157 | + | ||
158 | + if search == '': | ||
159 | + return redirect(reverse_lazy('news:manage_news')) | ||
160 | + | ||
161 | + return super(SearchNewsView, self).dispatch(request, *args, **kwargs) | ||
162 | + | ||
163 | + def get_queryset(self): | ||
164 | + inteiro = False | ||
165 | + | ||
166 | + search = self.request.GET.get('search', '') | ||
167 | + print(type(search)) | ||
168 | + try: | ||
169 | + search = int(search) | ||
170 | + inteiro = True | ||
171 | + except Exception as e: | ||
172 | + inteiro = False | ||
173 | + | ||
174 | + if inteiro: | ||
175 | + news = News.objects.filter(Q(title__icontains = search) | Q(creator__username__icontains = search) | Q(create_date__icontains = search) | Q(create_date__year = search) | Q(create_date__month = search) | Q(create_date__day = search) ).distinct().order_by('create_date') | ||
176 | + else: | ||
177 | + news = News.objects.filter(Q(title__icontains = search) | Q(creator__username__icontains = search) | Q(create_date__icontains = search) ).distinct().order_by('create_date') | ||
178 | + | ||
179 | + | ||
180 | + return news | ||
181 | + | ||
182 | + def get_context_data (self, **kwargs): | ||
183 | + context = super(SearchNewsView, self).get_context_data(**kwargs) | ||
184 | + context['title'] = _('Search News') | ||
185 | + context['search'] = self.request.GET.get('search') | ||
186 | + | ||
187 | + return context | ||
188 | + | ||
189 | +class DeleteNewsView(LoginRequiredMixin,LogMixin,generic.DeleteView): | ||
190 | + log_component = 'news' | ||
191 | + log_action = 'delete' | ||
192 | + log_resource = 'news' | ||
193 | + log_context = {} | ||
194 | + | ||
195 | + login_url = reverse_lazy("users:login") | ||
196 | + redirect_field_name = 'next' | ||
197 | + | ||
198 | + model = News | ||
199 | + template_name = 'news/delete.html' | ||
200 | + | ||
201 | + def delete(self, request, *args, **kwargs): | ||
202 | + news = get_object_or_404(News, slug = self.kwargs.get('slug')) | ||
203 | + return super(DeleteNewsView, self).delete(self, request, *args, **kwargs) | ||
204 | + | ||
205 | + def get_success_url(self): | ||
206 | + messages.success(self.request, _('News "%s" removed successfully!')%(self.object.title)) | ||
207 | + success_url = reverse_lazy('news:manage_news') | ||
208 | + | ||
209 | + return success_url | ||
210 | + | ||
211 | + def get_context_data(self, **kwargs): | ||
212 | + context = super(DeleteNewsView, self).get_context_data(**kwargs) | ||
213 | + context['title'] = _('Delete News') | ||
214 | + news = get_object_or_404(News, slug = self.kwargs.get('slug')) | ||
215 | + context['new'] = news | ||
216 | + | ||
217 | + self.log_context['new_creator'] = news.creator.get_short_name() | ||
218 | + self.log_context['new_title'] = news.title | ||
219 | + self.log_context['new_slug'] = news.slug | ||
220 | + | ||
221 | + super(DeleteNewsView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
222 | + | ||
223 | + return context |
notifications/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: 2017-04-11 19:18-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:12-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" |
@@ -97,17 +97,22 @@ msgstr "Notificação" | @@ -97,17 +97,22 @@ msgstr "Notificação" | ||
97 | 97 | ||
98 | #: notifications/templates/notifications/_ajax_history.html:48 | 98 | #: notifications/templates/notifications/_ajax_history.html:48 |
99 | #: notifications/templates/notifications/_history.html:47 | 99 | #: notifications/templates/notifications/_history.html:47 |
100 | +msgid "Aware" | ||
101 | +msgstr "Ciente" | ||
102 | + | ||
103 | +#: notifications/templates/notifications/_ajax_history.html:53 | ||
104 | +#: notifications/templates/notifications/_history.html:52 | ||
100 | msgid "Observation" | 105 | msgid "Observation" |
101 | msgstr "Observação" | 106 | msgstr "Observação" |
102 | 107 | ||
103 | -#: notifications/templates/notifications/_ajax_history.html:59 | ||
104 | -#: notifications/templates/notifications/_history.html:58 | 108 | +#: notifications/templates/notifications/_ajax_history.html:64 |
109 | +#: notifications/templates/notifications/_history.html:63 | ||
105 | #: notifications/templates/notifications/_view.html:28 | 110 | #: notifications/templates/notifications/_view.html:28 |
106 | msgid "Not Informed" | 111 | msgid "Not Informed" |
107 | msgstr "Não Informado" | 112 | msgstr "Não Informado" |
108 | 113 | ||
109 | -#: notifications/templates/notifications/_ajax_history.html:66 | ||
110 | -#: notifications/templates/notifications/_history.html:65 | 114 | +#: notifications/templates/notifications/_ajax_history.html:72 |
115 | +#: notifications/templates/notifications/_history.html:71 | ||
111 | msgid "No results found" | 116 | msgid "No results found" |
112 | msgstr "Nenhum resultado encontrado" | 117 | msgstr "Nenhum resultado encontrado" |
113 | 118 | ||
@@ -162,7 +167,9 @@ msgstr "Cancelar" | @@ -162,7 +167,9 @@ msgstr "Cancelar" | ||
162 | #: notifications/templates/notifications/index.html:19 | 167 | #: notifications/templates/notifications/index.html:19 |
163 | #: notifications/templates/notifications/subject.html:13 | 168 | #: notifications/templates/notifications/subject.html:13 |
164 | msgid "This pendencies list is updated every 24 hours. Last update was in:" | 169 | msgid "This pendencies list is updated every 24 hours. Last update was in:" |
165 | -msgstr "Esta lista de pendências é atualizada a cada 24 horas. A última atualização ocorreu em:" | 170 | +msgstr "" |
171 | +"Esta lista de pendências é atualizada a cada 24 horas. A última atualização " | ||
172 | +"ocorreu em:" | ||
166 | 173 | ||
167 | #: notifications/templates/notifications/index.html:19 | 174 | #: notifications/templates/notifications/index.html:19 |
168 | #: notifications/templates/notifications/subject.html:13 | 175 | #: notifications/templates/notifications/subject.html:13 |
@@ -209,13 +216,21 @@ msgstr "Essa tarefa está atrasada" | @@ -209,13 +216,21 @@ msgstr "Essa tarefa está atrasada" | ||
209 | msgid "You miss this task" | 216 | msgid "You miss this task" |
210 | msgstr "Você perdeu essa tarefa" | 217 | msgstr "Você perdeu essa tarefa" |
211 | 218 | ||
212 | -#: notifications/templatetags/notification_filters.py:120 | ||
213 | -#: notifications/templatetags/notification_filters.py:124 | 219 | +#: notifications/templatetags/notification_filters.py:40 |
220 | +msgid "Yes" | ||
221 | +msgstr "Sim" | ||
222 | + | ||
223 | +#: notifications/templatetags/notification_filters.py:42 | ||
224 | +msgid "No" | ||
225 | +msgstr "Não" | ||
226 | + | ||
227 | +#: notifications/templatetags/notification_filters.py:129 | ||
228 | +#: notifications/templatetags/notification_filters.py:133 | ||
214 | #, python-format | 229 | #, python-format |
215 | msgid "Goal defined to task realization: %s" | 230 | msgid "Goal defined to task realization: %s" |
216 | msgstr "Meta definida para realização da tarefa: %s" | 231 | msgstr "Meta definida para realização da tarefa: %s" |
217 | 232 | ||
218 | -#: notifications/templatetags/notification_filters.py:126 | 233 | +#: notifications/templatetags/notification_filters.py:135 |
219 | #, python-format | 234 | #, python-format |
220 | msgid "New goal defined to task realization: %s" | 235 | msgid "New goal defined to task realization: %s" |
221 | msgstr "Nova meta definida para realização da tarefa: %s" | 236 | msgstr "Nova meta definida para realização da tarefa: %s" |
@@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10.4 on 2017-04-13 23: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 | + ('notifications', '0002_auto_20170130_1828'), | ||
12 | + ] | ||
13 | + | ||
14 | + operations = [ | ||
15 | + migrations.AddField( | ||
16 | + model_name='notification', | ||
17 | + name='aware', | ||
18 | + field=models.BooleanField(default=False, verbose_name='Aware'), | ||
19 | + ), | ||
20 | + ] |
notifications/migrations/0004_remove_notification_aware.py
0 → 100644
@@ -0,0 +1,19 @@ | @@ -0,0 +1,19 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10.4 on 2017-04-13 23:40 | ||
3 | +from __future__ import unicode_literals | ||
4 | + | ||
5 | +from django.db import migrations | ||
6 | + | ||
7 | + | ||
8 | +class Migration(migrations.Migration): | ||
9 | + | ||
10 | + dependencies = [ | ||
11 | + ('notifications', '0003_notification_aware'), | ||
12 | + ] | ||
13 | + | ||
14 | + operations = [ | ||
15 | + migrations.RemoveField( | ||
16 | + model_name='notification', | ||
17 | + name='aware', | ||
18 | + ), | ||
19 | + ] |
notifications/templates/notifications/_ajax_history.html
@@ -44,6 +44,11 @@ | @@ -44,6 +44,11 @@ | ||
44 | </a> | 44 | </a> |
45 | </th> | 45 | </th> |
46 | <th> | 46 | <th> |
47 | + <a href="javascript: orderBy({{ subject_id }}, '{{ request|order_ajax:'aware' }}')"> | ||
48 | + {% trans 'Aware' %} <i class="fa fa-fw {{ request|order_icon_class:'aware' }} pull-right"></i> | ||
49 | + </a> | ||
50 | + </th> | ||
51 | + <th> | ||
47 | <a href="javascript: orderBy({{ subject_id }}, '{{ request|order_ajax:'obs' }}'')"> | 52 | <a href="javascript: orderBy({{ subject_id }}, '{{ request|order_ajax:'obs' }}'')"> |
48 | {% trans 'Observation' %} <i class="fa fa-fw {{ request|order_icon_class:'obs' }} pull-right"></i> | 53 | {% trans 'Observation' %} <i class="fa fa-fw {{ request|order_icon_class:'obs' }} pull-right"></i> |
49 | </a> | 54 | </a> |
@@ -58,12 +63,13 @@ | @@ -58,12 +63,13 @@ | ||
58 | <td>{{ notification.task.get_action_display }}</td> | 63 | <td>{{ notification.task.get_action_display }}</td> |
59 | <td>{{ notification.task.end_date|date:"SHORT_DATE_FORMAT"|default:_('Not Informed') }}</td> | 64 | <td>{{ notification.task.end_date|date:"SHORT_DATE_FORMAT"|default:_('Not Informed') }}</td> |
60 | <td>{{ notification.level|warning_msg }}</td> | 65 | <td>{{ notification.level|warning_msg }}</td> |
66 | + <td>{{ notification.viewed|viewed_msg }}</td> | ||
61 | <td>{{ notification|observation }}</td> | 67 | <td>{{ notification|observation }}</td> |
62 | </tr> | 68 | </tr> |
63 | {% endfor %} | 69 | {% endfor %} |
64 | {% else %} | 70 | {% else %} |
65 | <tr> | 71 | <tr> |
66 | - <td colspan="6" class="text-center">{% trans 'No results found' %}</td> | 72 | + <td colspan="7" class="text-center">{% trans 'No results found' %}</td> |
67 | </tr> | 73 | </tr> |
68 | {% endif %} | 74 | {% endif %} |
69 | </tbody> | 75 | </tbody> |
notifications/templates/notifications/_history.html
@@ -43,6 +43,11 @@ | @@ -43,6 +43,11 @@ | ||
43 | </a> | 43 | </a> |
44 | </th> | 44 | </th> |
45 | <th> | 45 | <th> |
46 | + <a href="{{ request|order_href:'aware' }}"> | ||
47 | + {% trans 'Aware' %} <i class="fa fa-fw {{ request|order_icon_class:'aware' }} pull-right"></i> | ||
48 | + </a> | ||
49 | + </th> | ||
50 | + <th> | ||
46 | <a href="{{ request|order_href:'obs' }}"> | 51 | <a href="{{ request|order_href:'obs' }}"> |
47 | {% trans 'Observation' %} <i class="fa fa-fw {{ request|order_icon_class:'obs' }} pull-right"></i> | 52 | {% trans 'Observation' %} <i class="fa fa-fw {{ request|order_icon_class:'obs' }} pull-right"></i> |
48 | </a> | 53 | </a> |
@@ -57,12 +62,13 @@ | @@ -57,12 +62,13 @@ | ||
57 | <td>{{ notification.task.get_action_display }}</td> | 62 | <td>{{ notification.task.get_action_display }}</td> |
58 | <td>{{ notification.task.end_date|date:"SHORT_DATE_FORMAT"|default:_('Not Informed') }}</td> | 63 | <td>{{ notification.task.end_date|date:"SHORT_DATE_FORMAT"|default:_('Not Informed') }}</td> |
59 | <td>{{ notification.level|warning_msg }}</td> | 64 | <td>{{ notification.level|warning_msg }}</td> |
65 | + <td>{{ notification.viewed|viewed_msg }}</td> | ||
60 | <td>{{ notification|observation }}</td> | 66 | <td>{{ notification|observation }}</td> |
61 | </tr> | 67 | </tr> |
62 | {% endfor %} | 68 | {% endfor %} |
63 | {% else %} | 69 | {% else %} |
64 | <tr> | 70 | <tr> |
65 | - <td colspan="6" class="text-center">{% trans 'No results found' %}</td> | 71 | + <td colspan="7" class="text-center">{% trans 'No results found' %}</td> |
66 | </tr> | 72 | </tr> |
67 | {% endif %} | 73 | {% endif %} |
68 | </tbody> | 74 | </tbody> |
notifications/templatetags/notification_filters.py
@@ -34,6 +34,15 @@ def warning_msg(level): | @@ -34,6 +34,15 @@ def warning_msg(level): | ||
34 | 34 | ||
35 | return msg | 35 | return msg |
36 | 36 | ||
37 | +@register.filter(name = 'viewed_msg') | ||
38 | +def viewed_msg(aware): | ||
39 | + if aware: | ||
40 | + msg = _('Yes') | ||
41 | + else: | ||
42 | + msg = _('No') | ||
43 | + | ||
44 | + return msg | ||
45 | + | ||
37 | @register.filter(name = 'done_percent') | 46 | @register.filter(name = 'done_percent') |
38 | def done_percent(notification): | 47 | def done_percent(notification): |
39 | users = get_resource_users(notification.task.resource) | 48 | users = get_resource_users(notification.task.resource) |
@@ -117,12 +126,12 @@ def observation(notification): | @@ -117,12 +126,12 @@ def observation(notification): | ||
117 | 126 | ||
118 | if notification.level == 1: | 127 | if notification.level == 1: |
119 | if notification.meta: | 128 | if notification.meta: |
120 | - msg = _('Goal defined to task realization: %s')%(formats.date_format(notification.meta, "SHORT_DATETIME_FORMAT")) | 129 | + msg = _('Goal defined to task realization: %s')%(formats.date_format(notification.meta.astimezone(timezone.get_current_timezone()), "SHORT_DATETIME_FORMAT")) |
121 | elif notification.level == 2: | 130 | elif notification.level == 2: |
122 | if notification.meta: | 131 | if notification.meta: |
123 | if notification.meta < timezone.now(): | 132 | if notification.meta < timezone.now(): |
124 | - msg = _('Goal defined to task realization: %s')%(formats.date_format(notification.meta, "SHORT_DATETIME_FORMAT")) | 133 | + msg = _('Goal defined to task realization: %s')%(formats.date_format(notification.meta.astimezone(timezone.get_current_timezone()), "SHORT_DATETIME_FORMAT")) |
125 | else: | 134 | else: |
126 | - msg = _('New goal defined to task realization: %s')%(formats.date_format(notification.meta, "SHORT_DATETIME_FORMAT")) | 135 | + msg = _('New goal defined to task realization: %s')%(formats.date_format(notification.meta.astimezone(timezone.get_current_timezone()), "SHORT_DATETIME_FORMAT")) |
127 | 136 | ||
128 | return msg | 137 | return msg |
129 | \ No newline at end of file | 138 | \ No newline at end of file |
notifications/utils.py
@@ -94,6 +94,11 @@ def get_order_by(order): | @@ -94,6 +94,11 @@ def get_order_by(order): | ||
94 | return ["-level"] | 94 | return ["-level"] |
95 | else: | 95 | else: |
96 | return ["level"] | 96 | return ["level"] |
97 | + elif "aware" in order: | ||
98 | + if "-" in order: | ||
99 | + return ["-viewed"] | ||
100 | + else: | ||
101 | + return ["viewed"] | ||
97 | elif "obs" in order: | 102 | elif "obs" in order: |
98 | if "-" in order: | 103 | if "-" in order: |
99 | return ["-meta"] | 104 | return ["-meta"] |
pdf_file/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: 2017-04-11 19:18-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:12-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" |
pendencies/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: 2017-04-11 19:17-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:13-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" |
reports/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: 2017-04-11 19:18-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:13-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" |
No preview for this file type
security/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: 2017-04-11 19:17-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:13-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" |
students_group/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: 2017-04-11 19:18-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:13-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" |
subjects/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: 2017-04-11 19:18-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:13-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" |
themes/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: 2017-04-11 19:17-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:13-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" |
topics/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: 2017-04-11 19:18-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:12-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" |
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: 2017-04-11 19:17-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:13-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,7 +18,7 @@ msgstr "" | @@ -18,7 +18,7 @@ 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:28 users/forms.py:33 users/forms.py:276 | 21 | +#: users/forms.py:28 users/forms.py:33 users/forms.py:279 |
22 | msgid "You must insert an email address" | 22 | msgid "You must insert an email address" |
23 | msgstr "Você deve inserir um endereço de email" | 23 | msgstr "Você deve inserir um endereço de email" |
24 | 24 | ||
@@ -30,45 +30,45 @@ msgstr "A imagem é muito grande. Ela deve conter menos de 2MB." | @@ -30,45 +30,45 @@ msgstr "A imagem é muito grande. Ela deve conter menos de 2MB." | ||
30 | msgid "The confirmation password is incorrect." | 30 | msgid "The confirmation password is incorrect." |
31 | msgstr "A confirmação de senha está incorreta." | 31 | msgstr "A confirmação de senha está incorreta." |
32 | 32 | ||
33 | -#: users/forms.py:61 users/forms.py:173 users/templates/users/login.html:52 | 33 | +#: users/forms.py:61 users/forms.py:175 users/templates/users/login.html:52 |
34 | msgid "Password" | 34 | msgid "Password" |
35 | msgstr "Senha" | 35 | msgstr "Senha" |
36 | 36 | ||
37 | -#: users/forms.py:62 users/forms.py:174 users/forms.py:233 users/forms.py:289 | 37 | +#: users/forms.py:62 users/forms.py:176 users/forms.py:236 users/forms.py:292 |
38 | msgid "Confirm Password" | 38 | msgid "Confirm Password" |
39 | msgstr "Confirmação de Senha" | 39 | msgstr "Confirmação de Senha" |
40 | 40 | ||
41 | -#: users/forms.py:108 users/forms.py:267 users/templates/users/list.html:56 | 41 | +#: users/forms.py:109 users/forms.py:270 users/templates/users/list.html:56 |
42 | #: users/templates/users/login.html:47 users/templates/users/search.html:47 | 42 | #: users/templates/users/login.html:47 users/templates/users/search.html:47 |
43 | msgid "Email" | 43 | msgid "Email" |
44 | msgstr "Email" | 44 | msgstr "Email" |
45 | 45 | ||
46 | -#: users/forms.py:109 users/models.py:27 users/templates/users/list.html:55 | 46 | +#: users/forms.py:110 users/models.py:27 users/templates/users/list.html:55 |
47 | #: users/templates/users/search.html:46 | 47 | #: users/templates/users/search.html:46 |
48 | msgid "Name" | 48 | msgid "Name" |
49 | msgstr "Nome" | 49 | msgstr "Nome" |
50 | 50 | ||
51 | -#: users/forms.py:110 users/models.py:28 | 51 | +#: users/forms.py:111 users/models.py:28 |
52 | msgid "Last Name" | 52 | msgid "Last Name" |
53 | msgstr "Sobrenome" | 53 | msgstr "Sobrenome" |
54 | 54 | ||
55 | -#: users/forms.py:111 users/models.py:29 | 55 | +#: users/forms.py:112 users/models.py:29 |
56 | msgid "Social Name" | 56 | msgid "Social Name" |
57 | msgstr "Nome Social" | 57 | msgstr "Nome Social" |
58 | 58 | ||
59 | -#: users/forms.py:232 users/forms.py:288 | 59 | +#: users/forms.py:235 users/forms.py:291 |
60 | msgid "New Password" | 60 | msgid "New Password" |
61 | msgstr "Nova Senha" | 61 | msgstr "Nova Senha" |
62 | 62 | ||
63 | -#: users/forms.py:239 | 63 | +#: users/forms.py:242 |
64 | msgid "The value inputed does not match with your actual password." | 64 | msgid "The value inputed does not match with your actual password." |
65 | msgstr "O valor inserido não corresponde à sua senha atual." | 65 | msgstr "O valor inserido não corresponde à sua senha atual." |
66 | 66 | ||
67 | -#: users/forms.py:260 | 67 | +#: users/forms.py:263 |
68 | msgid "Actual Password" | 68 | msgid "Actual Password" |
69 | msgstr "Senha Atual" | 69 | msgstr "Senha Atual" |
70 | 70 | ||
71 | -#: users/forms.py:281 | 71 | +#: users/forms.py:284 |
72 | msgid "You must insert a valid email address" | 72 | msgid "You must insert a valid email address" |
73 | msgstr "Você deve inserir um endereço de email válido" | 73 | msgstr "Você deve inserir um endereço de email válido" |
74 | 74 |
webconference/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: 2017-04-11 19:18-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:13-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" |
webpage/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: 2017-04-11 19:18-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:13-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" |
youtube_video/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: 2017-04-11 19:17-0300\n" | 11 | +"POT-Creation-Date: 2017-04-15 00:13-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" |