Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Permettre à un porteur de projet de gérér son projet depuis une autre plateforme en cas de multipublication #1010

Merged
merged 3 commits into from
Feb 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions recoco/apps/crm/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -1347,6 +1347,7 @@ def project_site_handover(request, project_id):
is_origin=False,
status="DRAFT",
)

onboarding_utils.notify_new_project(
site=site, project=project, owner=project.owner
)
Expand Down
10 changes: 4 additions & 6 deletions recoco/apps/home/management/commands/update_permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,21 @@
from recoco.apps.projects.models import Project, ProjectSwitchtender
from recoco.apps.projects.utils import (
assign_advisor,
assign_collaborator,
assign_collaborator_permissions,
assign_observer,
)
from recoco.utils import get_group_for_site


def assign_user_permissions_by_projects():
"""Per project permission for user"""
"""Per project permission for user."""
for project in Project.objects.all():
print("Updating perms for project:", project.name)
for site in project.sites.all():
print("\t* Updating permissions for collaborators...")
with settings.SITE_ID.override(site.id):
for membership in project.projectmember_set.all():
assign_collaborator(
membership.member, project, is_owner=membership.is_owner
)
assign_collaborator_permissions(membership.member, project)

print("\t* Updating permissions for advisors/observers...")
print(f"\t== On site {site} ==")
Expand Down Expand Up @@ -63,7 +61,7 @@ def assign_user_permissions_by_projects():


def assign_group_permissions_by_sites():
"""Per site permissions for Group"""
"""Per site permissions for Group."""
for site in Site.objects.all():
print("site:", site)
with settings.SITE_ID.override(site.id):
Expand Down
2 changes: 1 addition & 1 deletion recoco/apps/projects/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ def origin(self):

def moderated(self):
"""Filter out sites where this project is not yet validated"""
return self.exclude(status="DRAFT")
return self.exclude(status__in=["DRAFT", "REJECTED"])

def to_moderate(self):
"""List only sites where this project needs moderation"""
Expand Down
16 changes: 13 additions & 3 deletions recoco/apps/projects/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,14 @@


@transaction.atomic
def assign_collaborator(user, project, is_owner=False):
"""Make someone becomes a project collaborator and assign permissions"""
def assign_collaborator_permissions(user, project):
"""
Assign permissions to project collaborator.

If the project is still in draft (not accepted by moderators)
"""
permissions = models.COLLABORATOR_DRAFT_PERMISSIONS
if project.project_sites.origin().status != "DRAFT":
if project.project_sites.current().status != "DRAFT":
permissions += models.COLLABORATOR_PERMISSIONS

for perm in permissions:
Expand All @@ -39,6 +42,13 @@ def assign_collaborator(user, project, is_owner=False):
print(f"Unable to find permission <{perm}>, aborting.")
raise e


@transaction.atomic
def assign_collaborator(user, project, is_owner=False):
"""Make someone becomes a project collaborator and assign permissions"""

assign_collaborator_permissions(user, project)

# if we already have an owner, don't allow her to be replaced
if is_owner:
if (
Expand Down
6 changes: 6 additions & 0 deletions recoco/apps/projects/views/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
from ..utils import (
assign_advisor,
assign_collaborator,
assign_collaborator_permissions,
assign_observer,
can_administrate_project,
is_advisor_for_project,
Expand Down Expand Up @@ -159,6 +160,11 @@ def project_moderation_accept(request, project_pk):
# Invite her to fill in a new form
# Send an email to the project owner

# We assign permissions to use their project on this website in
# case of multiplication
for membership in project.projectmember_set.all():
assign_collaborator_permissions(membership.member, project)

params = {
"project": digests.make_project_digest(project, owner),
"site": digests.make_site_digest(
Expand Down
2 changes: 1 addition & 1 deletion recoco/apps/projects/views/rest.py
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,7 @@ def fetch_the_site_project_statuses_for_user(site, user):
"""
project_statuses = models.UserProjectStatus.objects.filter(
user=user, project__deleted=None, project__sites=site
)
).exclude(project__project_sites__status__in=["DRAFT", "REJECTED"])

# create missing user project status
create_missing_user_project_statuses(site, user, project_statuses)
Expand Down
Loading