add user settings for Sources

This commit is contained in:
Jens Langhammer
2019-03-13 16:49:30 +01:00
parent e98e5e4e3e
commit ae3c092238
17 changed files with 84 additions and 109 deletions

View File

@ -186,6 +186,12 @@ class Source(PolicyModel):
"""Return additional Info, such as a callback URL. Show in the administration interface."""
return None
def has_user_settings(self):
"""Entrypoint to integrate with User settings. Can either return False if no
user settings are available, or a tuple or string, string, string where the first string
is the name the item has, the second string is the icon and the third is the view-name."""
return False
def __str__(self):
return self.name

View File

@ -26,7 +26,7 @@
<li class="dropdown">
<button class="btn btn-link dropdown-toggle nav-item-iconic" id="dropdownMenu1" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="true">
<span title="Help" class="fa pficon-help dropdown-title"></span>
<span title="Help" class="fa pficon-help"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
{% comment %} <li><a href="#0">Help</a></li> {% endcomment %}

View File

@ -2,6 +2,7 @@
{% load i18n %}
{% load is_active %}
{% load static %}
{% load passbook_user_settings %}
{% block content %}
@ -24,6 +25,15 @@
</a>
</li>
{% endfor %}
<li class="nav-divider"></li>
{% user_sources as us %}
{% for name, icon, link in us %}
<li class="{% if link == request.get_full_path %} active {% endif %}">
<a href="{{ link }}">
<img src="{% static icon %}" alt=""> {{ name }}
</a>
</li>
{% endfor %}
</ul>
</div>
</div>

View File

@ -2,7 +2,7 @@
from django import template
from passbook.core.models import Factor
from passbook.core.models import Factor, Source
from passbook.core.policies import PolicyEngine
register = template.Library()
@ -20,3 +20,17 @@ def user_factors(context):
if policy_engine.passing and _link:
matching_factors.append(_link)
return matching_factors
@register.simple_tag(takes_context=True)
def user_sources(context):
"""Return a list of all sources which are enabled for the user"""
user = context.get('request').user
_all_sources = Source.objects.filter(enabled=True).select_subclasses()
matching_sources = []
for factor in _all_sources:
_link = factor.has_user_settings()
policy_engine = PolicyEngine(factor.policies.all())
policy_engine.for_user(user).with_request(context.get('request')).build()
if policy_engine.passing and _link:
matching_sources.append(_link)
return matching_sources