Add Project entity, user routes and clipper controls

This commit is contained in:
2025-03-31 16:25:31 +02:00
parent 4c0e212650
commit ce3b17b683
24 changed files with 2989 additions and 21 deletions

View File

@@ -4,22 +4,13 @@
{% block body %}
<nav class="navbar has-background-light" role="navigation" aria-label="main navigation">
<div class="navbar-brand">
<a class="navbar-item" href="/">
<span class="icon mr-2">
<i class="fas fa-home"></i>
</span>
WebArchi
</a>
<!-- navbar items, navbar burger... -->
</div>
</nav>
{% include 'partials/navbar.html.twig' %}
<div class="columns">
<div class="column is-full">
<div id="scene"></div>
<div id="ui" data-theme="light" data-controller="form">
<aside class="menu ml-4 mt-3">
<aside class="menu ml-4 mt-3" data-controller="clipper">
<p class="menu-label is-size-6">Progetto</p>
<div class="file mt-4 is-link">
<label class="file-label">
@@ -66,9 +57,36 @@
<ul class="menu-list">
<li id="selected-prop"></li>
</ul>
<p class="menu-label is-size-6">Strumenti</p>
<ul class="menu-list">
<li class="menu-item">
Clipper
<ul class="menu-list">
<li class="menu-item"><label class="checkbox">Attivo <input class="checkbox ml-2" id="clip-en" type="checkbox" checked></label></li>
<li class="menu-item">
Colore piani
<div class="mt-2 p-2 input is-small" data-clipper-target="hex">
<input type="color" data-action="input->clipper#color change->clipper#color"
class="is-small is-clickable mr-2" aria-label="Colore clipper" value="#202932" style="border: none">
<span>#202932</span>
</div>
</li>
<li class="menu-item">
Grandezza piani
<div class="mt-2 input is-small" data-clipper-target="range">
<input class="is-clickable is-small" data-action="change->clipper#size"
type="range" step="0.1" min="5" max="15" style="width: 100%;">
</div>
</li>
</ul>
</li>
</ul>
<div class="buttons ml-6">
<button class="button is-danger" data-action="clipper#deleteAll" title="Elimina tutti i piani">Elimina</button>
</div>
</aside>
</div>
</div>
</div>
{% endblock %}

View File

@@ -1,6 +1,6 @@
{% extends 'base.html.twig' %}
{% block title %}Login | ArCOA{% endblock %}
{% block title %}Login | WebArchi{% endblock %}
{% block body %}

View File

@@ -0,0 +1,18 @@
<nav class="navbar has-background-light" role="navigation" aria-label="main navigation">
<div class="navbar-brand">
<a class="navbar-item" href="/">
<span class="icon mr-2">
<i class="fas fa-home"></i>
</span>
WebArchi
</a>
<!-- navbar items, navbar burger... -->
</div>
{% if app.user %}
<div class="navbar-end">
<div class="navbar-item" data-controller="dropdown">
{% include 'partials/user.html.twig' %}
</div>
</div>
{% endif %}
</nav>

View File

@@ -0,0 +1,51 @@
<div class="buttons dropdown is-right" data-dropdown-target="drop">
<div class="dropdown-trigger" data-action="click->dropdown#toggle">
<a class="button is-primary">
<span class="icon">
<i class="fa fa-user-circle"></i>
</span>
<span class="pl-3">
{{ app.user.useridentifier }}
</span>
<span class="icon">
<i class="fa fa-caret-down" data-dropdown-target="caret"></i>
</span>
</a>
</div>
<div class="dropdown-menu" role="menu">
<div class="dropdown-content">
<a href="/user" class="dropdown-item">
<span class="icon is-small">
<i class="fa fa-user"></i>
</span>
<span class="pl-2 is-size-6">Profilo</span>
</a>
<a href="/projects" class="dropdown-item">
<span class="icon is-small">
<i class="fa fa-pen-nib"></i>
</span>
<span class="pl-2 is-size-6">Progetti</span>
</a>
{% if is_granted('ROLE_ADMIN') %}
<a href="/admin" class="dropdown-item">
<span class="icon is-small">
<i class="fa fa-cogs"></i>
</span>
<span class="pl-2 is-size-6">Admin</span>
</a>
{% endif %}
<a href="https://git.electricmandarine.cloud/nicolo/ifc-web-app/issues" class="dropdown-item">
<span class="icon is-small">
<i class="fa fa-bug"></i>
</span>
<span class="pl-2 is-size-6">Segnala un bug</span>
</a>
<hr class="dropdown-divider" />
<a href="/logout" class="button is-link is-fullwidth">
<span class="icon is-small">
<i class="fa fa-sign-out"></i>
</span>
<span class="has-text-centered"> Logout</span>
</a>
</div>
</div>

View File

@@ -0,0 +1,122 @@
{% extends 'base.html.twig' %}
{% block title %}Profilo | WebArchi{% endblock %}
{% block body %}
{% include 'partials/navbar.html.twig' %}
<div class="container" style="max-width: 50vw">
<h1 class="is-size-1 mt-2 has-text-centered">Profilo utente</h1>
<div class="container mt-6">
<div class="card">
<div class="card-content">
<div class="media">
<div class="media-left">
<span class="icon is-large">
<i class="fa fa-user-circle fa-2x"></i>
</span>
</div>
<div class="media-content">
<p class="title is-4">{{ app.user.useridentifier }}</p>
<p class="subtitle is-6">
<span class="icon is-small">
<i class="fa fa-envelope"></i>
</span>
{{ app.user.email ?? 'no email' }}
</p>
</div>
</div>
<div class="content">
<p class="is-size-4 pl-3">
<strong>Ruolo utente:</strong>
{% if 'ROLE_ADMIN' in app.user.roles %}
Amministratore
{% elseif 'ROLE_REVISOR' in app.user.roles %}
Revisore
{% else %}
Utente
{% endif %}
</p>
<article class="message is-info">
<div class="message-header">
<p>
<span class="icon is-small is-size-5 mr-3">
<i class="fa fa-info-circle"></i>
</span>
Permessi
</p>
</div>
<div class="message-body">
{% if 'ROLE_ADMIN' in app.user.roles %}
<p>
Administrators can create and edit users of the ArCOA data entry system,
including changing passwords and user roles, and disabling accounts.
</p>
<p>
They can perform all actions on all records and vocabularies
(create, view, edit, delete).
</p>
{% elseif 'ROLE_REVISOR' in app.user.roles %}
<p>Revisors can perform all actions (create, view, edit, delete) on all records and vocabs.</p>
{% elseif 'ROLE_EDITOR' in app.user.roles %}
<p>
Editors can view vocabs, view and search all records, create new records with "draft" or "complete" status,
edit their own records and those created by other editors; they can only delete their own records, as long as the status
is "draft" or "complete".
</p>
{% else %}
<p>
Readers can view and search records that are either published, excluded or unindexed (draft and complete records cannot be viewed).
</p>
{% endif %}
</div>
</article>
</div>
</div>
</div>
<div class="card content">
{% for message in app.flashes('error') %}
<article class="message is-danger">
<div class="message-body">{{ message }}</div>
</article>
{% endfor %}
{% for message in app.flashes('notice') %}
<article class="message is-success">
<div class="message-body">{{ message }}</div>
</article>
{% endfor %}
<form class="card-content" id="change-password" method="post" action="">
<div class="field">
<h3 class="is-size-4 has-text-centered">Modifica password</h3>
</div>
<div class="field">
<label class="label">Password attuale</label>
<p class="control">
<input class="input" name="_current_pass" required type="password" placeholder="Current password">
</p>
</div>
<div class="field">
<label class="label">Nuova password</label>
<p class="control">
<input class="input" name="_new_pass" required type="password" placeholder="New password">
</p>
</div>
<div class="field">
<label class="label">Conferma password</label>
<p class="control">
<input class="input" name="_confirm_pass" required type="password" placeholder="Confirm password">
</p>
</div>
<input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}">
<div class="field mt-5">
<p class="control" id="submit">
<button class="button is-link is-fullwidth" type="submit">
Invio
</button>
</p>
</div>
</form>
</div>
</div>
</div>
{% endblock %}