* chore: remove posthog integration and analytics scaffold
Removes the PostHog integration end to end, plus the inert autocapture
scaffold left behind by an earlier partial removal (d61b157929,
"chore: remove posthog events (#8465)").
Backend:
- delete bgtasks/event_tracking_task.py and utils/analytics_events.py
- drop all 6 track_event.delay call sites
- drop POSTHOG_API_KEY / POSTHOG_HOST settings
- stop returning posthog_api_key / posthog_host from GET /api/instances/
- drop the posthog==3.5.0 dependency
Frontend:
- delete packages/constants/src/event-tracker (all 40 exports were unused)
- remove 42 data-ph-element attributes across 36 files
- remove the dead shouldTrackEvents and trackerElements prop chains
- remove the Microsoft Clarity session-recording tag
Note: GET /api/instances/ no longer returns posthog_api_key/posthog_host.
Nothing in this repo read them and neither do plane-ee or plane-commercial,
but the endpoint is AllowAny and cached for 2h.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HD7dTidmtWWRRiFv3nmW3s
* chore: apply oxfmt formatting
Collapse JSX elements and import statements that were left multi-line
after the tracker props and specifiers were removed. Whitespace only.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HD7dTidmtWWRRiFv3nmW3s
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
# Copyright (c) 2023-present Plane Software, Inc. and contributors
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
# See the LICENSE file for details.
|
|
|
|
# Module imports
|
|
from plane.db.models import (
|
|
ProjectMember,
|
|
ProjectMemberInvite,
|
|
WorkspaceMember,
|
|
WorkspaceMemberInvite,
|
|
)
|
|
from plane.utils.cache import invalidate_cache_directly
|
|
|
|
|
|
def process_workspace_project_invitations(user):
|
|
"""This function takes in User and adds him to all workspace and projects that the user has accepted invited of"""
|
|
|
|
# Check if user has any accepted invites for workspace and add them to workspace
|
|
workspace_member_invites = WorkspaceMemberInvite.objects.filter(email=user.email, accepted=True)
|
|
|
|
WorkspaceMember.objects.bulk_create(
|
|
[
|
|
WorkspaceMember(
|
|
workspace_id=workspace_member_invite.workspace_id,
|
|
member=user,
|
|
role=workspace_member_invite.role,
|
|
)
|
|
for workspace_member_invite in workspace_member_invites
|
|
],
|
|
ignore_conflicts=True,
|
|
)
|
|
|
|
for workspace_member_invite in workspace_member_invites:
|
|
invalidate_cache_directly(
|
|
path=f"/api/workspaces/{str(workspace_member_invite.workspace.slug)}/members/",
|
|
url_params=False,
|
|
user=False,
|
|
multiple=True,
|
|
)
|
|
|
|
# Check if user has any project invites
|
|
project_member_invites = ProjectMemberInvite.objects.filter(email=user.email, accepted=True)
|
|
|
|
# Add user to workspace
|
|
WorkspaceMember.objects.bulk_create(
|
|
[
|
|
WorkspaceMember(
|
|
workspace_id=project_member_invite.workspace_id,
|
|
role=(project_member_invite.role if project_member_invite.role in [5, 15] else 15),
|
|
member=user,
|
|
created_by_id=project_member_invite.created_by_id,
|
|
)
|
|
for project_member_invite in project_member_invites
|
|
],
|
|
ignore_conflicts=True,
|
|
)
|
|
|
|
# Now add the users to project
|
|
ProjectMember.objects.bulk_create(
|
|
[
|
|
ProjectMember(
|
|
workspace_id=project_member_invite.workspace_id,
|
|
role=(project_member_invite.role if project_member_invite.role in [5, 15] else 15),
|
|
member=user,
|
|
created_by_id=project_member_invite.created_by_id,
|
|
)
|
|
for project_member_invite in project_member_invites
|
|
],
|
|
ignore_conflicts=True,
|
|
)
|
|
|
|
# Delete all the invites
|
|
workspace_member_invites.delete()
|
|
project_member_invites.delete()
|