Commit 0b32801cff5ffdc06e20e5f39152869b524c8dcc
1 parent
7ce858cd
Exists in
master
and in
3 other branches
added open in new window logic for pdf files
Showing
9 changed files
with
126 additions
and
12 deletions
Show diff stats
@@ -0,0 +1,21 @@ | @@ -0,0 +1,21 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10.4 on 2017-02-09 17:34 | ||
3 | +from __future__ import unicode_literals | ||
4 | + | ||
5 | +from django.db import migrations, models | ||
6 | +import django.db.models.deletion | ||
7 | + | ||
8 | + | ||
9 | +class Migration(migrations.Migration): | ||
10 | + | ||
11 | + dependencies = [ | ||
12 | + ('mural', '0005_mural_edited'), | ||
13 | + ] | ||
14 | + | ||
15 | + operations = [ | ||
16 | + migrations.AlterField( | ||
17 | + model_name='comment', | ||
18 | + name='post', | ||
19 | + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='comment_post', to='mural.Mural', verbose_name='Post'), | ||
20 | + ), | ||
21 | + ] |
pdf_file/forms.py
@@ -24,7 +24,7 @@ class PDFFileForm(forms.ModelForm): | @@ -24,7 +24,7 @@ class PDFFileForm(forms.ModelForm): | ||
24 | tags = forms.CharField(label = _('Tags'), required = False) | 24 | tags = forms.CharField(label = _('Tags'), required = False) |
25 | class Meta: | 25 | class Meta: |
26 | model = PDFFile | 26 | model = PDFFile |
27 | - fields = ['name', 'file', 'brief_description', 'all_students', 'students', 'groups', 'visible'] | 27 | + fields = ['name', 'file', 'brief_description','show_window', 'all_students', 'students', 'groups', 'visible'] |
28 | labels = { | 28 | labels = { |
29 | 'name': _('File name'), | 29 | 'name': _('File name'), |
30 | } | 30 | } |
@@ -0,0 +1,21 @@ | @@ -0,0 +1,21 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10.4 on 2017-02-09 17:34 | ||
3 | +from __future__ import unicode_literals | ||
4 | + | ||
5 | +from django.db import migrations, models | ||
6 | +import pdf_file.models | ||
7 | + | ||
8 | + | ||
9 | +class Migration(migrations.Migration): | ||
10 | + | ||
11 | + dependencies = [ | ||
12 | + ('pdf_file', '0001_initial'), | ||
13 | + ] | ||
14 | + | ||
15 | + operations = [ | ||
16 | + migrations.AlterField( | ||
17 | + model_name='pdffile', | ||
18 | + name='file', | ||
19 | + field=models.FileField(upload_to='files/', validators=[pdf_file.models.validate_file_extension], verbose_name='File'), | ||
20 | + ), | ||
21 | + ] |
pdf_file/models.py
@@ -16,6 +16,7 @@ def validate_file_extension(value): | @@ -16,6 +16,7 @@ def validate_file_extension(value): | ||
16 | 16 | ||
17 | class PDFFile(Resource): | 17 | class PDFFile(Resource): |
18 | file = models.FileField(_('File'), upload_to='files/', validators = [validate_file_extension]) | 18 | file = models.FileField(_('File'), upload_to='files/', validators = [validate_file_extension]) |
19 | + | ||
19 | class Meta: | 20 | class Meta: |
20 | verbose_name = "PDFFile" | 21 | verbose_name = "PDFFile" |
21 | verbose_name_plural = "PDFFiles" | 22 | verbose_name_plural = "PDFFiles" |
pdf_file/templates/pdf_file/_form.html
@@ -87,6 +87,29 @@ | @@ -87,6 +87,29 @@ | ||
87 | {% endif %} | 87 | {% endif %} |
88 | </div> | 88 | </div> |
89 | 89 | ||
90 | + <div class="form-group{% if form.has_error %} has-error {% endif %}"> | ||
91 | + <div class=" checkbox"> | ||
92 | + <label for="{{ form.show_window.auto_id }}"> | ||
93 | + {% render_field form.show_window %} {{ form.show_window.label }} | ||
94 | + </label> | ||
95 | + </div> | ||
96 | + | ||
97 | + <span id="helpBlock" class="help-block">{{ form.show_window.help_text }}</span> | ||
98 | + | ||
99 | + {% if form.show_window.errors %} | ||
100 | + <div class="alert alert-danger alert-dismissible" role="alert"> | ||
101 | + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | ||
102 | + <span aria-hidden="true">×</span> | ||
103 | + </button> | ||
104 | + <ul> | ||
105 | + {% for error in form.show_window.errors %} | ||
106 | + <li>{{ error }}</li> | ||
107 | + {% endfor %} | ||
108 | + </ul> | ||
109 | + </div> | ||
110 | + {% endif %} | ||
111 | + </div> | ||
112 | + | ||
90 | <div class="form-group{% if form.has_error %} has-error {% endif %} is-fileinput"> | 113 | <div class="form-group{% if form.has_error %} has-error {% endif %} is-fileinput"> |
91 | <label for="{{ form.tags.auto_id }}">{{ form.tags.label }}</label> | 114 | <label for="{{ form.tags.auto_id }}">{{ form.tags.label }}</label> |
92 | {% render_field form.tags class='form-control' data-role="tagsinput" %} | 115 | {% render_field form.tags class='form-control' data-role="tagsinput" %} |
pdf_file/templates/pdf_file/view.html
@@ -17,13 +17,16 @@ | @@ -17,13 +17,16 @@ | ||
17 | 17 | ||
18 | {% breadcrumb topic 'subjects:topic_view' topic.subject.slug topic.slug %} | 18 | {% breadcrumb topic 'subjects:topic_view' topic.subject.slug topic.slug %} |
19 | 19 | ||
20 | - {% trans 'Edit: ' as bread %} | ||
21 | - {% with bread|add:pdf_file.name as bread_slug %} | ||
22 | - {% breadcrumb bread_slug 'pdf_file:update' topic.slug pdf_file.slug %} | ||
23 | - {% endwith %} | 20 | + |
24 | {% endblock %} | 21 | {% endblock %} |
25 | 22 | ||
26 | 23 | ||
27 | {% block content %} | 24 | {% block content %} |
28 | - {{context\pdf_file}} | 25 | + |
26 | +<object width="100%" height="100%" type="application/pdf" data="{{pdf_file.file.path}}" id="pdf_content"> | ||
27 | + <p>Insert your error message here, if the PDF cannot be displayed.</p> | ||
28 | + </object> | ||
29 | + | ||
30 | + <embed src="{{pdf_file.file.path}}" width="100%" height="100%"> | ||
31 | + | ||
29 | {% endblock content %} | 32 | {% endblock content %} |
30 | \ No newline at end of file | 33 | \ No newline at end of file |
pdf_file/views.py
@@ -32,6 +32,12 @@ class ViewPDFFile(generic.TemplateView): | @@ -32,6 +32,12 @@ class ViewPDFFile(generic.TemplateView): | ||
32 | 32 | ||
33 | return super(ViewPDFFile, self).dispatch(request, *args, **kwargs) | 33 | return super(ViewPDFFile, self).dispatch(request, *args, **kwargs) |
34 | 34 | ||
35 | + def get_context_data(self, **kwargs): | ||
36 | + context = super(ViewPDFFile, self).get_context_data(**kwargs) | ||
37 | + slug = self.kwargs.get('slug', '') | ||
38 | + pdf_file = PDFFile.objects.get(slug=slug) | ||
39 | + context['pdf_file'] = pdf_file | ||
40 | + return context | ||
35 | 41 | ||
36 | 42 | ||
37 | def render_to_response(self, context, **response_kwargs): | 43 | def render_to_response(self, context, **response_kwargs): |
@@ -40,10 +46,18 @@ class ViewPDFFile(generic.TemplateView): | @@ -40,10 +46,18 @@ class ViewPDFFile(generic.TemplateView): | ||
40 | 46 | ||
41 | if not path.exists(pdf_file.file.path): | 47 | if not path.exists(pdf_file.file.path): |
42 | raise Http404() | 48 | raise Http404() |
43 | - | ||
44 | - response = HttpResponse(open(pdf_file.file.path, 'rb').read(),content_type = 'application/pdf') | ||
45 | - | ||
46 | - return response | 49 | + if pdf_file.show_window: |
50 | + response = HttpResponse(open(pdf_file.file.path, 'rb').read(),content_type = 'application/pdf') | ||
51 | + return response | ||
52 | + | ||
53 | + | ||
54 | + response_kwargs.setdefault('content_type', self.content_type) | ||
55 | + return self.response_class( | ||
56 | + request = self.request, | ||
57 | + template = self.get_template_names(), | ||
58 | + context = context, | ||
59 | + **response_kwargs | ||
60 | + ) | ||
47 | 61 | ||
48 | class PDFFileCreateView(LoginRequiredMixin, LogMixin , generic.CreateView): | 62 | class PDFFileCreateView(LoginRequiredMixin, LogMixin , generic.CreateView): |
49 | form_class = PDFFileForm | 63 | form_class = PDFFileForm |
subjects/views.py
@@ -566,9 +566,9 @@ class SubjectSearchView(LoginRequiredMixin, LogMixin, ListView): | @@ -566,9 +566,9 @@ class SubjectSearchView(LoginRequiredMixin, LogMixin, ListView): | ||
566 | q = q | Q(tags__name__unaccent__iexact=word ) | 566 | q = q | Q(tags__name__unaccent__iexact=word ) |
567 | 567 | ||
568 | subjects = Subject.objects.filter(q).distinct() | 568 | subjects = Subject.objects.filter(q).distinct() |
569 | + self.resources = Resource.objects.select_related('link', 'filelink', 'webpage', 'ytvideo', 'pdffile').filter(q ).distinct() | ||
570 | + | ||
569 | 571 | ||
570 | - self.resources = Resource.objects.select_related('link', 'filelink', 'webpage', 'ytvideo').filter(q).distinct() | ||
571 | - | ||
572 | self.totals = {'resources': self.resources.count(), 'my_subjects': subjects.count()} | 572 | self.totals = {'resources': self.resources.count(), 'my_subjects': subjects.count()} |
573 | 573 | ||
574 | option = self.kwargs.get('option') | 574 | option = self.kwargs.get('option') |
@@ -0,0 +1,31 @@ | @@ -0,0 +1,31 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10.4 on 2017-02-09 17:34 | ||
3 | +from __future__ import unicode_literals | ||
4 | + | ||
5 | +from django.db import migrations, models | ||
6 | +import themes.models | ||
7 | + | ||
8 | + | ||
9 | +class Migration(migrations.Migration): | ||
10 | + | ||
11 | + dependencies = [ | ||
12 | + ('themes', '0004_themes_favicon'), | ||
13 | + ] | ||
14 | + | ||
15 | + operations = [ | ||
16 | + migrations.AlterField( | ||
17 | + model_name='themes', | ||
18 | + name='favicon', | ||
19 | + field=models.ImageField(blank=True, null=True, upload_to='themes/', validators=[themes.models.validate_img_extension], verbose_name='Favicon'), | ||
20 | + ), | ||
21 | + migrations.AlterField( | ||
22 | + model_name='themes', | ||
23 | + name='large_logo', | ||
24 | + field=models.ImageField(blank=True, null=True, upload_to='themes/', validators=[themes.models.validate_img_extension], verbose_name='Large Logo'), | ||
25 | + ), | ||
26 | + migrations.AlterField( | ||
27 | + model_name='themes', | ||
28 | + name='small_logo', | ||
29 | + field=models.ImageField(blank=True, null=True, upload_to='themes/', validators=[themes.models.validate_img_extension], verbose_name='Small Logo'), | ||
30 | + ), | ||
31 | + ] |