1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-28 16:17:02 +00:00
Files
seahub/seahub/handlers.py
awu0403 0981a0dc99 update repo trash (#6148)
* update repo trash

* update code

* select trash

* update

* update

* merge clean trash

* fix-uni-test-and-code-optimize

* Update mysql.sql

* code-optimize

* update select

* update sql

* update UI

* change trash dialog style

* optimize code

* fix code format

* Update repo_trash.py

* update

* add clean trash Command

* update

* optimize code

* support page

* support frontend page

* update

* Update __init__.py

* Update clean_repo_trash.py

* Update clean_repo_trash.py

* Update clean_repo_trash.py

* Update trash-dialog.js

* Update clean_repo_trash.py

* set default by 90

* Update clean_repo_trash.py

* update

---------

Co-authored-by: 孙永强 <11704063+s-yongqiang@user.noreply.gitee.com>
Co-authored-by: r350178982 <32759763+r350178982@users.noreply.github.com>
Co-authored-by: Michael An <2331806369@qq.com>
2024-07-18 13:44:41 +08:00

184 lines
5.8 KiB
Python

# Copyright (c) 2012-2016 Seafile Ltd.
import logging
from . import settings
import datetime
from seaserv import seafile_api, get_org_id_by_repo_id
logger = logging.getLogger(__name__)
try:
from seafevents import seafevents_api
def repo_created_cb(sender, **kwargs):
org_id = kwargs['org_id']
creator = kwargs['creator']
repo_id = kwargs['repo_id']
repo_name = kwargs['repo_name']
# Move here to avoid model import during Django setup.
# TODO: Don't register signal/handlers during Seahub start.
if org_id and org_id > 0:
related_users = seafile_api.org_get_shared_users_by_repo(org_id, repo_id)
else:
related_users = seafile_api.get_shared_users_by_repo(repo_id)
org_id = -1
if creator not in related_users:
related_users.append(creator)
record = {
'op_type': 'create',
'obj_type': 'repo',
'timestamp': datetime.datetime.utcnow(),
'repo_id': repo_id,
'repo_name': repo_name,
'path': '/',
'op_user': creator,
'related_users': related_users,
'org_id': org_id,
}
from .utils import SeafEventsSession
session = SeafEventsSession()
seafevents_api.save_user_activity(session, record)
session.close()
LIBRARY_TEMPLATES = getattr(settings, 'LIBRARY_TEMPLATES', {})
library_template = kwargs['library_template']
if LIBRARY_TEMPLATES and library_template:
try:
dir_path_list = LIBRARY_TEMPLATES[library_template]
for dir_path in dir_path_list:
seafile_api.mkdir_with_parents(repo_id, '/', dir_path.strip('/'), creator)
except Exception as e:
logger.error(e)
def repo_deleted_cb(sender, **kwargs):
"""When a repo is deleted, an event would be added to every user in all
groups to which this repo is shared.
"""
org_id = kwargs['org_id']
operator = kwargs['operator']
repo_owner = kwargs['repo_owner']
repo_id = kwargs['repo_id']
repo_name = kwargs['repo_name']
if org_id and org_id > 0:
related_users = seafile_api.org_get_shared_users_by_repo(org_id, repo_id)
else:
related_users = seafile_api.get_shared_users_by_repo(repo_id)
org_id = -1
if repo_owner not in related_users:
related_users.append(repo_owner)
record = {
'op_type': 'delete',
'obj_type': 'repo',
'timestamp': datetime.datetime.utcnow(),
'repo_id': repo_id,
'repo_name': repo_name,
'path': '/',
'op_user': operator,
'related_users': related_users,
'org_id': org_id if org_id and org_id > 0 else -1,
}
from .utils import SeafEventsSession
session = SeafEventsSession()
seafevents_api.save_user_activity(session, record)
session.close()
def clean_up_repo_trash_cb(sender, **kwargs):
"""When a repo trash is deleted, the operator will be recorded.
"""
org_id = kwargs['org_id']
operator = kwargs['operator']
repo_id = kwargs['repo_id']
days = kwargs.get('days', None)
repo_name = kwargs['repo_name']
repo_owner = kwargs['repo_owner']
if org_id and org_id > 0:
related_users = seafile_api.org_get_shared_users_by_repo(org_id, repo_id)
else:
related_users = seafile_api.get_shared_users_by_repo(repo_id)
org_id = -1
if repo_owner not in related_users:
related_users.append(repo_owner)
record = {
'op_type': 'clean-up-trash',
'obj_type': 'repo',
'timestamp': datetime.datetime.utcnow(),
'repo_id': repo_id,
'repo_name': repo_name,
'path': '/',
'days': days,
'op_user': operator,
'related_users': related_users,
'org_id': org_id,
}
from .utils import SeafEventsSession
session = SeafEventsSession()
try:
seafevents_api.save_user_activity(session, record)
seafevents_api.clean_up_repo_trash(session, repo_id, days)
except Exception as e:
logger.error(e)
session.close()
def repo_restored_cb(sender, **kwargs):
repo_id = kwargs['repo_id']
operator = kwargs['operator']
repo = seafile_api.get_repo(repo_id)
org_id = get_org_id_by_repo_id(repo_id)
if org_id and org_id > 0:
related_users = seafile_api.org_get_shared_users_by_repo(org_id, repo_id)
repo_owner = seafile_api.get_org_repo_owner(repo_id)
else:
related_users = seafile_api.get_shared_users_by_repo(repo_id)
repo_owner = seafile_api.get_repo_owner(repo_id)
if repo_owner not in related_users:
related_users.append(repo_owner)
record = {
'op_type': 'recover',
'obj_type': 'repo',
'timestamp': datetime.datetime.utcnow(),
'repo_id': repo_id,
'repo_name': repo.repo_name,
'path': '/',
'op_user': operator,
'related_users': related_users,
'org_id': org_id,
}
from .utils import SeafEventsSession
session = SeafEventsSession()
seafevents_api.save_user_activity(session, record)
session.close()
except ImportError:
def repo_created_cb(sender, **kwargs):
pass
def repo_restored_cb(sender, **kwargs):
pass
def repo_deleted_cb(sender, **kwargs):
pass
def clean_up_repo_trash_cb(sender, **kwargs):
pass