Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
AlekSIS-Core
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Terraform modules
Monitor
Service Desk
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
AlekSIS®
Official
AlekSIS-Core
Commits
92b9b545
Verified
Commit
92b9b545
authored
4 years ago
by
Tom Teichler
Browse files
Options
Downloads
Patches
Plain Diff
Check permissions and send mail if enabled
parent
93ff633a
No related branches found
Branches containing commit
No related tags found
Tags containing commit
1 merge request
!563
Resolve "Allow control over self-editing of person"
Pipeline
#7243
passed
4 years ago
Stage: test
Stage: build
Stage: publish
Stage: docker
Stage: deploy
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
aleksis/core/forms.py
+17
-0
17 additions, 0 deletions
aleksis/core/forms.py
aleksis/core/templates/templated_email/person_changed.email
+32
-0
32 additions, 0 deletions
aleksis/core/templates/templated_email/person_changed.email
aleksis/core/views.py
+27
-3
27 additions, 3 deletions
aleksis/core/views.py
with
76 additions
and
3 deletions
aleksis/core/forms.py
+
17
−
0
View file @
92b9b545
...
...
@@ -10,6 +10,7 @@ from django.utils.translation import gettext_lazy as _
from
django_select2.forms
import
ModelSelect2MultipleWidget
,
ModelSelect2Widget
,
Select2Widget
from
dynamic_preferences.forms
import
PreferenceForm
from
guardian.core
import
ObjectPermissionChecker
from
material
import
Fieldset
,
Layout
,
Row
from
.mixins
import
ExtensibleForm
,
SchoolTermRelatedExtensibleForm
...
...
@@ -137,6 +138,22 @@ class EditPersonForm(ExtensibleForm):
required
=
False
,
label
=
_
(
"
New user
"
),
help_text
=
_
(
"
Create a new account
"
)
)
def
__init__
(
self
,
request
:
HttpRequest
,
*
args
,
**
kwargs
):
super
().
__init__
(
*
args
,
**
kwargs
)
# Disable non-editable fields
person_fields
=
set
([
field
.
name
for
field
in
Person
.
syncable_fields
()]).
intersection
(
set
(
self
.
fields
)
)
if
self
.
instance
:
checker
=
ObjectPermissionChecker
(
request
.
user
)
checker
.
prefetch_perms
([
self
.
instance
])
for
field
in
person_fields
:
if
not
checker
.
has_perm
(
f
"
core.change_person_field_
{
field
}
"
,
self
.
instance
):
self
.
fields
[
field
].
disabled
=
True
def
clean
(
self
)
->
None
:
# Use code implemented in dedicated form to verify user selection
return
PersonAccountForm
.
clean
(
self
)
...
...
This diff is collapsed.
Click to expand it.
aleksis/core/templates/templated_email/person_changed.email
0 → 100644
+
32
−
0
View file @
92b9b545
{% load i18n %}
{% block subject %}
{% blocktrans with person=person %}{{ person }} changed their data!{% endblocktrans %}
{% endblock %}
{% block plain %}
{% trans "Hello," %}
{% blocktrans with person=person %}
the person {{ person }} recently changed the following fields:
{% endblocktrans %}
{% for field in send_notification_fields %}
* {{ field }}
{% endfor %}
{% endblock %}
{% block html %}
<p>{% trans "Hello," %}</p>
<p>
{% blocktrans with person=person %}
the person {{ person }} recently changed the following fields:
{% endblocktrans %}
</p>
<ul>
{% for field in send_notification_fields %}
<li>{{ field }}</li>
{% endfor %}
</ul>
{% endblock %}
This diff is collapsed.
Click to expand it.
aleksis/core/views.py
+
27
−
3
View file @
92b9b545
...
...
@@ -28,6 +28,7 @@ from health_check.views import MainView
from
reversion
import
set_user
from
reversion.views
import
RevisionMixin
from
rules.contrib.views
import
PermissionRequiredMixin
,
permission_required
from
templated_email
import
send_templated_mail
from
aleksis.core.data_checks
import
DataCheckRegistry
,
check_data
...
...
@@ -77,7 +78,7 @@ from .tables import (
)
from
.util
import
messages
from
.util.apps
import
AppConfig
from
.util.core_helpers
import
has_person
,
objectgetter_optional
from
.util.core_helpers
import
get_site_preferences
,
has_person
,
objectgetter_optional
from
.util.forms
import
PreferenceLayout
from
.util.pdf
import
render_pdf
...
...
@@ -352,16 +353,39 @@ def edit_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse
if
id_
:
# Edit form for existing group
edit_person_form
=
EditPersonForm
(
request
.
POST
or
None
,
request
.
FILES
or
None
,
instance
=
person
request
,
request
.
POST
or
None
,
request
.
FILES
or
None
,
instance
=
person
)
else
:
# Empty form to create a new group
if
request
.
user
.
has_perm
(
"
core.create_person
"
):
edit_person_form
=
EditPersonForm
(
request
.
POST
or
None
,
request
.
FILES
or
None
)
edit_person_form
=
EditPersonForm
(
request
,
request
.
POST
or
None
,
request
.
FILES
or
None
)
else
:
raise
PermissionDenied
()
if
request
.
method
==
"
POST
"
:
if
edit_person_form
.
is_valid
():
if
person
and
person
==
request
.
user
.
person
:
# Check if user edited non-editable field
notification_fields
=
get_site_preferences
()[
"
account__notification_on_person_change
"
]
send_notification_fields
=
set
(
edit_person_form
.
changed_data
).
intersection
(
set
(
notification_fields
)
)
context
[
"
send_notification_fields
"
]
=
send_notification_fields
if
send_notification_fields
:
context
[
"
send_notification_fields
"
]
=
send_notification_fields
send_templated_mail
(
template_name
=
"
person_changed
"
,
from_email
=
request
.
user
.
person
.
mail_sender_via
,
headers
=
{
"
Reply-To
"
:
request
.
user
.
person
.
mail_sender
,
"
Sender
"
:
request
.
user
.
person
.
mail_sender
,
},
recipient_list
=
[
get_site_preferences
()[
"
account__person_change_notification_contact
"
]
],
context
=
context
,
)
with
reversion
.
create_revision
():
set_user
(
request
.
user
)
edit_person_form
.
save
(
commit
=
True
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment