misc: add a profile view for authenticated users
This commit is contained in:
		
							
								
								
									
										34
									
								
								aircox/templates/accounts/profile.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								aircox/templates/accounts/profile.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					{% extends "aircox/base.html" %}
 | 
				
			||||||
 | 
					{% load i18n aircox %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block head_title %}
 | 
				
			||||||
 | 
					    {% block title %}{{ user.username }}{% endblock %}
 | 
				
			||||||
 | 
					{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block content-container %}
 | 
				
			||||||
 | 
					<div class="container content page-content">
 | 
				
			||||||
 | 
					  <h2 class="subtitle">Mon Profil</h2>
 | 
				
			||||||
 | 
					  {% translate "Username" %} : {{ user.username|title }}<br/>
 | 
				
			||||||
 | 
					  <!-- Connexion: {{ user.last_login }} -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <h2 class="subtitle is-1">Mes émissions</h2>
 | 
				
			||||||
 | 
					  {% if programs|length %}
 | 
				
			||||||
 | 
					  <ul>
 | 
				
			||||||
 | 
					  {% for p in programs %}
 | 
				
			||||||
 | 
					  <li>{{ p.title }} :
 | 
				
			||||||
 | 
					       
 | 
				
			||||||
 | 
					      <a href="{% url 'program-detail' slug=p.slug %}">
 | 
				
			||||||
 | 
					          <span title="{% translate 'View' %} {{ page }}">{% translate 'View' %}</span>
 | 
				
			||||||
 | 
					      </a>
 | 
				
			||||||
 | 
					       
 | 
				
			||||||
 | 
					      <a href="{% url 'program-edit' pk=p.pk %}">
 | 
				
			||||||
 | 
					          <span title="{% translate 'Edit' %} {{ page }}">{% translate 'Edit' %} </span>
 | 
				
			||||||
 | 
					      </a>
 | 
				
			||||||
 | 
					  </li>
 | 
				
			||||||
 | 
					  {% endfor %}
 | 
				
			||||||
 | 
					  </ul>
 | 
				
			||||||
 | 
					  {% else %}
 | 
				
			||||||
 | 
					  {% trans 'You are not listed as a program editor yet' %}
 | 
				
			||||||
 | 
					  {% endif %}
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					{% endblock %}
 | 
				
			||||||
@ -72,16 +72,21 @@ Usefull context:
 | 
				
			|||||||
                        </a>
 | 
					                        </a>
 | 
				
			||||||
                        {% endif %}
 | 
					                        {% endif %}
 | 
				
			||||||
                        {% if user.is_authenticated %}
 | 
					                        {% if user.is_authenticated %}
 | 
				
			||||||
                        <div class="navbar-item">
 | 
					                        <a class="nav-item" href="{% url "profile" %}" target="new">
 | 
				
			||||||
                          <a>{{ user.username }}</a>   <a href="{% url 'logout' %}"> <i class="fa fa-power-off"></i></a>
 | 
					                            {% translate "Profile" %}
 | 
				
			||||||
                        </div>
 | 
					                        </a>
 | 
				
			||||||
 | 
					                        <a class="nav-item" href="{% url "logout" %}" title="{% translate "Disconnect" %}"
 | 
				
			||||||
 | 
					                            aria-label="{% translate "Disconnect" %}">
 | 
				
			||||||
 | 
					                            <i class="fa fa-power-off"></i>
 | 
				
			||||||
 | 
					                        </a>
 | 
				
			||||||
                        {% endif %}
 | 
					                        {% endif %}
 | 
				
			||||||
                        {% endblock %}
 | 
					                        {% endblock %}
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                    {% endblock %}
 | 
					                    {% endblock %}
 | 
				
			||||||
                </nav>
 | 
					                </nav>
 | 
				
			||||||
                {% endblock %}
 | 
					
 | 
				
			||||||
                {% block secondary-nav %}{% endblock %}
 | 
					                {% block secondary-nav %}{% endblock %}
 | 
				
			||||||
 | 
					                {% endblock %}
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            {% block main-container %}
 | 
					            {% block main-container %}
 | 
				
			||||||
@ -95,6 +100,8 @@ Usefull context:
 | 
				
			|||||||
                {% endblock %}
 | 
					                {% endblock %}
 | 
				
			||||||
                {% endspaceless %}
 | 
					                {% endspaceless %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                {% block header-container %}
 | 
					                {% block header-container %}
 | 
				
			||||||
                {% if page or cover or title %}
 | 
					                {% if page or cover or title %}
 | 
				
			||||||
                <header class="container header preview preview-header {% if cover %}has-cover{% endif %}">
 | 
					                <header class="container header preview preview-header {% if cover %}has-cover{% endif %}">
 | 
				
			||||||
 | 
				
			|||||||
@ -10,3 +10,13 @@ def test_authenticate(user, client, program):
 | 
				
			|||||||
    r = client.post(reverse("login"), kwargs={"username": "foo", "password": "bar"})
 | 
					    r = client.post(reverse("login"), kwargs={"username": "foo", "password": "bar"})
 | 
				
			||||||
    assert b"errorlist" in r.content
 | 
					    assert b"errorlist" in r.content
 | 
				
			||||||
    assert client.login(username="user1", password="bar")
 | 
					    assert client.login(username="user1", password="bar")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@pytest.mark.django_db()
 | 
				
			||||||
 | 
					def test_profile_programs(user, client, program):
 | 
				
			||||||
 | 
					    client.force_login(user)
 | 
				
			||||||
 | 
					    r = client.get(reverse("profile"))
 | 
				
			||||||
 | 
					    assert program.title not in r.content.decode("utf-8")
 | 
				
			||||||
 | 
					    user.groups.add(program.editors)
 | 
				
			||||||
 | 
					    r = client.get(reverse("profile"))
 | 
				
			||||||
 | 
					    assert program.title in r.content.decode("utf-8")
 | 
				
			||||||
 | 
				
			|||||||
@ -127,4 +127,6 @@ urls = [
 | 
				
			|||||||
        views.errors.NoStationErrorView.as_view(),
 | 
					        views.errors.NoStationErrorView.as_view(),
 | 
				
			||||||
        name="errors-no-station",
 | 
					        name="errors-no-station",
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
 | 
					    path("gestion/", views.ProfileView.as_view(), name="profile"),
 | 
				
			||||||
 | 
					    path("accounts/profile/", views.ProfileView.as_view(), name="profile"),
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
				
			|||||||
@ -11,6 +11,7 @@ from .page import (
 | 
				
			|||||||
    PageDetailView,
 | 
					    PageDetailView,
 | 
				
			||||||
    PageListView,
 | 
					    PageListView,
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					from .profile import ProfileView
 | 
				
			||||||
from .program import (
 | 
					from .program import (
 | 
				
			||||||
    ProgramDetailView,
 | 
					    ProgramDetailView,
 | 
				
			||||||
    ProgramListView,
 | 
					    ProgramListView,
 | 
				
			||||||
@ -38,6 +39,7 @@ __all__ = (
 | 
				
			|||||||
    "BasePageListView",
 | 
					    "BasePageListView",
 | 
				
			||||||
    "PageDetailView",
 | 
					    "PageDetailView",
 | 
				
			||||||
    "PageListView",
 | 
					    "PageListView",
 | 
				
			||||||
 | 
					    "ProfileView",
 | 
				
			||||||
    "ProgramDetailView",
 | 
					    "ProgramDetailView",
 | 
				
			||||||
    "ProgramListView",
 | 
					    "ProgramListView",
 | 
				
			||||||
    "ProgramPageDetailView",
 | 
					    "ProgramPageDetailView",
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										15
									
								
								aircox/views/profile.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								aircox/views/profile.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					from django.contrib.auth.mixins import LoginRequiredMixin
 | 
				
			||||||
 | 
					from django.views.generic.base import TemplateView
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from aircox.models import Program
 | 
				
			||||||
 | 
					from aircox.views import BaseView
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ProfileView(LoginRequiredMixin, BaseView, TemplateView):
 | 
				
			||||||
 | 
					    template_name = "accounts/profile.html"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_context_data(self, **kwargs):
 | 
				
			||||||
 | 
					        groups = self.request.user.groups.all()
 | 
				
			||||||
 | 
					        programs = Program.objects.filter(editors__in=groups)
 | 
				
			||||||
 | 
					        kwargs.update({"user": self.request.user, "programs": programs})
 | 
				
			||||||
 | 
					        return super().get_context_data(**kwargs)
 | 
				
			||||||
		Reference in New Issue
	
	Block a user