Skip to content

Commit

Permalink
Rebase dev
Browse files Browse the repository at this point in the history
  • Loading branch information
gromdimon committed Mar 19, 2024
1 parent 2e0b801 commit 0fa83c3
Show file tree
Hide file tree
Showing 3 changed files with 161 additions and 76 deletions.
168 changes: 94 additions & 74 deletions projectroles/templates/projectroles/_site_titlebar_dropdown.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,47 +7,56 @@
{# Responsive replacement for user dropdown #}

{# Admin link #}
{% if request.user.is_superuser %}
<li class="nav-item sodar-navbar-alt-item">
<a class="nav-link" href="{% url 'admin:index' %}"
id="sodar-navbar-link-admin" target="_blank">
<i class="iconify" data-icon="mdi:cogs"></i> Admin
</a>
</li>
{% endif %}

{#{% if request.user.is_superuser %}#}
{# <li class="nav-item sodar-navbar-alt-item">#}
{# <a class="nav-link" href="{% url 'admin:index' %}"#}
{# id="sodar-navbar-link-admin" target="_blank">#}
{# <i class="iconify" data-icon="mdi:cogs"></i> Admin#}
{# </a>#}
{# </li>#}
{#{% endif %}#}
{##}
{# Site-wide apps #}
{% for plugin in site_apps %}
{% has_perm plugin.app_permission request.user as can_view_app %}
{% if not plugin.app_permission or can_view_app %}
<li class="nav-item sodar-navbar-alt-item {% get_app_link_state plugin request.resolver_match.app_name request.resolver_match.url_name %}">
<a class="nav-link"
href="{% url plugin.entry_point_url_id %}"
id="sodar-navbar-siteapp-link-{{ plugin.name }}">
<i class="iconify" data-icon="{{ plugin.icon }}"></i> {{ plugin.title }}</a>
</li>
{% endif %}
{% endfor %}

{#{% for plugin in site_apps %}#}
{# {% has_perm plugin.app_permission request.user as can_view_app %}#}
{# {% if not plugin.app_permission or can_view_app %}#}
{# <li class="nav-item sodar-navbar-alt-item {% get_app_link_state plugin request.resolver_match.app_name request.resolver_match.url_name %}">#}
{# <a class="nav-link"#}
{# href="{% url plugin.entry_point_url_id %}"#}
{# id="sodar-navbar-siteapp-link-{{ plugin.name }}">#}
{# <i class="iconify" data-icon="{{ plugin.icon }}"></i> {{ plugin.title }}</a>#}
{# </li>#}
{# {% endif %}#}
{#{% endfor %}#}
{##}
{# Log out link #}
{% if request.user.is_authenticated %}
<li class="nav-item sodar-navbar-alt-item">
<a class="nav-link text-danger"
href="{% url 'logout' %}"
id="sodar-alt-nav-link-sign-out">
<i class="iconify" data-icon="mdi:logout-variant"></i> Logout
</a>
</li>
{% elif not kiosk_mode %}
<li class="nav-item sodar-navbar-alt-item">
<a class="nav-link text-white"
href="{% url 'login' %}"
id="sodar-alt-nav-link-sign-in">
<i class="iconify" data-icon="mdi:login-variant"></i> Login
{#{% if request.user.is_authenticated %}#}
{# <li class="nav-item sodar-navbar-alt-item">#}
{# <a class="nav-link text-danger"#}
{# href="{% url 'logout' %}"#}
{# id="sodar-alt-nav-link-sign-out">#}
{# <i class="iconify" data-icon="mdi:logout-variant"></i> Logout#}
{# </a>#}
{# </li>#}
{#{% elif not kiosk_mode %}#}
{# <li class="nav-item sodar-navbar-alt-item">#}
{# <a class="nav-link text-white"#}
{# href="{% url 'login' %}"#}
{# id="sodar-alt-nav-link-sign-in">#}
{# <i class="iconify" data-icon="mdi:login-variant"></i> Login#}
{# </a>#}
{# </li>#}
{#{% endif %}#}
{% get_user_links request as dropdown_links %}
{% for link in dropdown_links %}
<li class="nav-item sodar-navbar-alt-item {% if link.active %}active{% endif %}">
<a class="nav-link {% if link.name == 'sign-out' %}text-danger{% endif %}
{% if link.name == 'sign-in' %}text-white{% endif %}"
href="{{ link.url }}"
id="sodar-navbar-nav-link-{{ link.name }}">
<i class="iconify" data-icon="{{ link.icon }}"></i> {{ link.label }}
</a>
</li>
{% endif %}

{% endfor %}
{# Actual user dropdown #}

<li class="nav-item sodar-navbar-user-dropdown">
Expand Down Expand Up @@ -76,44 +85,55 @@
<div class="dropdown-divider"></div>

{# Site-wide apps #}
{% for plugin in site_apps %}
{% has_perm plugin.app_permission request.user as can_view_app %}
{% if not plugin.app_permission or can_view_app %}
<a class="dropdown-item {% get_app_link_state plugin request.resolver_match.app_name request.resolver_match.url_name %}"
href="{% url plugin.entry_point_url_id %}"
id="sodar-navbar-siteapp-link-{{ plugin.name }}">
<i class="iconify" data-icon="{{ plugin.icon }}"></i> {{ plugin.title }}
</a>
{% endif %}
{% endfor %}
{% if site_apps|length > 0 %}
<div class="dropdown-divider"></div>
{% endif %}

{# {% for plugin in site_apps %}#}
{# {% has_perm plugin.app_permission request.user as can_view_app %}#}
{# {% if not plugin.app_permission or can_view_app %}#}
{# <a class="dropdown-item {% get_app_link_state plugin request.resolver_match.app_name request.resolver_match.url_name %}"#}
{# href="{% url plugin.entry_point_url_id %}"#}
{# id="sodar-navbar-siteapp-link-{{ plugin.name }}">#}
{# <i class="iconify" data-icon="{{ plugin.icon }}"></i> {{ plugin.title }}#}
{# </a>#}
{# {% endif %}#}
{# {% endfor %}#}
{# {% if site_apps|length > 0 %}#}
{# <div class="dropdown-divider"></div>#}
{# {% endif %}#}
{##}
{# Admin link #}
{% if request.user.is_superuser %}
<a class="dropdown-item"
href="#"
id="sodar-navbar-link-admin-warning"
data-toggle="modal" data-target="#sodar-modal">
<i class="iconify" data-icon="mdi:cogs"></i> Django Admin
</a>
<div class="dropdown-divider"></div>
{% endif %}

{# {% if request.user.is_superuser %}#}
{# <a class="dropdown-item"#}
{# href="#"#}
{# id="sodar-navbar-link-admin-warning"#}
{# data-toggle="modal" data-target="#sodar-modal">#}
{# <i class="iconify" data-icon="mdi:cogs"></i> Django Admin#}
{# </a>#}
{# <div class="dropdown-divider"></div>#}
{# {% endif %}#}
{##}
{# Log out / log in links #}
{% if request.user.is_authenticated %}
<a class="dropdown-item text-danger"
href="{% url 'logout' %}"
id="sodar-navbar-link-logout">
<i class="iconify" data-icon="mdi:logout-variant"></i> Logout
</a>
{% else %}
<a class="dropdown-item text-primary"
href="{% url 'login' %}"
id="sodar-navbar-link-login">
<i class="iconify" data-icon="mdi:login-variant"></i> Login
{# {% if request.user.is_authenticated %}#}
{# <a class="dropdown-item text-danger"#}
{# href="{% url 'logout' %}"#}
{# id="sodar-navbar-link-logout">#}
{# <i class="iconify" data-icon="mdi:logout-variant"></i> Logout#}
{# </a>#}
{# {% else %}#}
{# <a class="dropdown-item text-primary"#}
{# href="{% url 'login' %}"#}
{# id="sodar-navbar-link-login">#}
{# <i class="iconify" data-icon="mdi:login-variant"></i> Login#}
{# </a>#}
{# {% endif %}#}

{% get_user_links request as dropdown_links %}
{% for link in dropdown_links %}
<a class="dropdown-item {% if link.active %}active{% endif %}
{% if link.name == 'sign-out' %}text-danger{% endif %}
{% if link.name == 'sign-in' %}text-primary{% endif %}"
href="{{ link.url }}"
id="sodar-navbar-link-{{ link.name }}">
<i class="iconify" data-icon="{{ link.icon }}"></i> {{ link.label }}
</a>
{% endif %}
{% endfor %}
</div>
</li>
9 changes: 8 additions & 1 deletion projectroles/templatetags/projectroles_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from projectroles.app_settings import AppSettingAPI
from projectroles.models import RemoteProject, SODAR_CONSTANTS
from projectroles.plugins import get_active_plugins
from projectroles.utils import AppLinkContent
from projectroles.utils import UserDropdownContent, AppLinkContent


register = template.Library()
Expand Down Expand Up @@ -270,6 +270,13 @@ def get_admin_warning():
return ret


@register.simple_tag
def get_user_links(request):
"""Return user dropdown links"""
user_dropdown_content = UserDropdownContent()
return user_dropdown_content.get_user_links(request)


@register.simple_tag
def get_project_app_links(request, project=None):
"""Return sidebar links"""
Expand Down
60 changes: 59 additions & 1 deletion projectroles/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
from django.urls import reverse
from django.utils import timezone

from projectroles.models import SODAR_CONSTANTS
from projectroles.constants import get_sodar_constants
from projectroles.plugins import get_active_plugins
from projectroles.models import SODAR_CONSTANTS

# Settings
SECRET_LENGTH = getattr(settings, 'PROJECTROLES_SECRET_LENGTH', 32)
Expand Down Expand Up @@ -299,3 +300,60 @@ def get_project_app_links(self, request, project=None):
}
)
return ret


class UserDropdownContent:
"""Class to generate user dropdown content"""

def get_user_links(self, request):
links = []
# Add site-wide apps links
site_apps = get_active_plugins('site_app')
for app in site_apps:
if not app.app_permission or request.user.has_perm(
app.app_permission
):
links.append(
{
'name': app.name,
'url': reverse(app.entry_point_url_id),
'label': app.title,
'icon': app.icon,
'active': request.path
== reverse(app.entry_point_url_id),
}
)
# Add admin link
if request.user.is_superuser:
links.append(
{
'name': 'admin',
'url': reverse('admin:index'),
'label': 'Django Admin',
'icon': 'mdi:cogs',
'active': request.path == reverse('admin:index'),
}
)
# Add log out link
if request.user.is_authenticated:
links.append(
{
'name': 'sign-out',
'url': reverse('logout'),
'label': 'Logout',
'icon': 'mdi:logout-variant',
'active': False,
}
)
elif not getattr(settings, 'PROJECTROLES_KIOSK_MODE', False):
links.append(
{
'name': 'sign-in',
'url': reverse('login'),
'label': 'Login',
'icon': 'mdi:login-variant',
'active': False,
}
)
print(links)
return links

0 comments on commit 0fa83c3

Please sign in to comment.