Skip to content
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
21 changes: 21 additions & 0 deletions admin/templates/users/reindex_user_share.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<a data-toggle="modal" data-target="#confirmReindexShareUser" class="btn btn-default">SHARE Reindex User Content</a>
<div class="modal" id="confirmReindexShareUser">
<div class="modal-dialog">
<div class="modal-content">
<form class="well" method="post" action="{% url 'users:reindex-share-user' guid=user.guid %}">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">x</button>
<h3>Are you sure you want to SHARE reindex all content for this user? {{ user.guid }}</h3>
<p>This will trigger SHARE reindexing for all nodes and preprints where this user is a contributor.</p>
</div>
{% csrf_token %}
<div class="modal-footer">
<input class="btn btn-danger" type="submit" value="Confirm" />
<button type="button" class="btn btn-default" data-dismiss="modal">
Cancel
</button>
</div>
</form>
</div>
</div>
</div>
1 change: 1 addition & 0 deletions admin/templates/users/user.html
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
{% include "users/disable_user.html" with user=user %}
{% include "users/mark_spam.html" with user=user %}
{% include "users/reindex_user_elastic.html" with user=user %}
{% include "users/reindex_user_share.html" with user=user %}
</div>
</div>
</div>
Expand Down
2 changes: 2 additions & 0 deletions admin/users/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
re_path(r'^(?P<guid>[a-z0-9]+)/get_reset_password/$', views.GetPasswordResetLink.as_view(), name='get-reset-password'),
re_path(r'^(?P<guid>[a-z0-9]+)/reindex_elastic_user/$', views.UserReindexElastic.as_view(),
name='reindex-elastic-user'),
re_path(r'^(?P<guid>[a-z0-9]+)/reindex_share_user/$', views.UserShareReindex.as_view(),
name='reindex-share-user'),
re_path(r'^(?P<guid>[a-z0-9]+)/merge_accounts/$', views.UserMergeAccounts.as_view(), name='merge-accounts'),
re_path(r'^(?P<guid>[a-z0-9]+)/draft_registrations/$', views.UserDraftRegistrationsList.as_view(), name='draft-registrations'),
]
39 changes: 39 additions & 0 deletions admin/users/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
CONFIRM_HAM,
UNFLAG_SPAM,
REINDEX_ELASTIC,
REINDEX_SHARE,
)

from admin.users.forms import (
Expand Down Expand Up @@ -551,6 +552,44 @@ def post(self, request, *args, **kwargs):
return redirect(self.get_success_url())


class UserShareReindex(UserMixin, View):
permission_required = 'osf.change_osfuser'

def post(self, request, *args, **kwargs):
from api.share.utils import update_share
user = self.get_object()

nodes_count = user.contributed.count()
preprints_count = user.preprints.filter(deleted=None).count()

for node in user.contributed:
try:
update_share(node)
except Exception as e:
messages.error(request, f'Failed to SHARE reindex node {node._id}: {e}')

for preprint in user.preprints.filter(deleted=None):
try:
update_share(preprint)
except Exception as e:
messages.error(request, f'Failed to SHARE reindex preprint {preprint._id}: {e}')

messages.success(
request,
f'Triggered SHARE reindexing for {nodes_count} nodes and {preprints_count} preprints'
)

update_admin_log(
user_id=self.request.user.id,
object_id=user._id,
object_repr='User',
message=f'SHARE reindexed all content for user {user._id}',
action_flag=REINDEX_SHARE
)

return redirect(self.get_success_url())


class UserDraftRegistrationsList(UserMixin, ListView):
template_name = 'users/draft-registrations.html'
permission_required = 'osf.view_draftregistration'
Expand Down
14 changes: 14 additions & 0 deletions osf/models/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -869,6 +869,20 @@ def merge_user(self, user):
user.save()
signals.user_account_merged.send(user)

from api.share.utils import update_share

for node in user.contributed:
try:
update_share(node)
except Exception as e:
logger.exception(f'Failed to SHARE reindex node {node._id} during user merge: {e}')

for preprint in user.preprints.all():
try:
update_share(preprint)
except Exception as e:
logger.exception(f'Failed to SHARE reindex preprint {preprint._id} during user merge: {e}')

def _merge_users_preprints(self, user):
"""
Preprints use guardian. The PreprintContributor table stores order and bibliographic information.
Expand Down
Loading