mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-21 11:27:18 +00:00
Merge branch '4.4'
Conflicts: seahub/auth/views.py seahub/templates/libraries.html seahub/templates/sysadmin/sys_admin_group_info.html seahub/templates/sysadmin/sys_publink_admin.html seahub/templates/sysadmin/userinfo.html seahub/urls.py
This commit is contained in:
@@ -14,6 +14,7 @@ from django.contrib import messages
|
||||
from django.http import HttpResponse, Http404, HttpResponseRedirect, HttpResponseNotAllowed
|
||||
from django.shortcuts import render_to_response
|
||||
from django.template import RequestContext
|
||||
from django.utils import timezone
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from seaserv import ccnet_threaded_rpc, seafserv_threaded_rpc, get_emailusers, \
|
||||
@@ -36,8 +37,11 @@ from seahub.utils.licenseparse import parse_license
|
||||
from seahub.utils.sysinfo import get_platform_name
|
||||
|
||||
from seahub.views import get_system_default_repo_id
|
||||
from seahub.views.ajax import (get_related_users_by_org_repo,
|
||||
get_related_users_by_repo)
|
||||
from seahub.forms import SetUserQuotaForm, AddUserForm, BatchAddUserForm
|
||||
from seahub.profile.models import Profile, DetailedProfile
|
||||
from seahub.signals import repo_deleted
|
||||
from seahub.share.models import FileShare, UploadLinkShare
|
||||
import seahub.settings as settings
|
||||
from seahub.settings import INIT_PASSWD, SITE_NAME, CONSTANCE_CONFIG, \
|
||||
@@ -362,6 +366,37 @@ def _populate_user_quota_usage(user):
|
||||
def sys_user_admin(request):
|
||||
"""List all users from database.
|
||||
"""
|
||||
try:
|
||||
from seahub_extra.plan.models import UserPlan
|
||||
enable_user_plan = True
|
||||
except ImportError:
|
||||
enable_user_plan = False
|
||||
|
||||
if enable_user_plan and request.GET.get('filter', '') == 'paid':
|
||||
# show paid users
|
||||
users = []
|
||||
ups = UserPlan.objects.all()
|
||||
for up in ups:
|
||||
try:
|
||||
u = User.objects.get(up.username)
|
||||
except User.DoesNotExist:
|
||||
continue
|
||||
|
||||
_populate_user_quota_usage(u)
|
||||
users.append(u)
|
||||
|
||||
last_logins = UserLastLogin.objects.filter(username__in=[x.username for x in users])
|
||||
for u in users:
|
||||
for e in last_logins:
|
||||
if e.username == u.username:
|
||||
u.last_login = e.last_login
|
||||
|
||||
return render_to_response('sysadmin/sys_useradmin_paid.html', {
|
||||
'users': users,
|
||||
'enable_user_plan': enable_user_plan,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
### List all users
|
||||
# Make sure page request is an int. If not, deliver first page.
|
||||
try:
|
||||
current_page = int(request.GET.get('page', '1'))
|
||||
@@ -426,6 +461,7 @@ def sys_user_admin(request):
|
||||
'guest_user': GUEST_USER,
|
||||
'is_pro': is_pro_version(),
|
||||
'pro_server': pro_server,
|
||||
'enable_user_plan': enable_user_plan,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
@@ -1148,27 +1184,67 @@ def sys_org_admin(request):
|
||||
current_page = 1
|
||||
per_page = 25
|
||||
|
||||
try:
|
||||
from seahub_extra.plan.models import OrgPlan
|
||||
enable_org_plan = True
|
||||
except ImportError:
|
||||
enable_org_plan = False
|
||||
|
||||
if enable_org_plan and request.GET.get('filter', '') == 'paid':
|
||||
orgs = []
|
||||
ops = OrgPlan.objects.all()
|
||||
for e in ops:
|
||||
o = ccnet_threaded_rpc.get_org_by_id(e.org_id)
|
||||
if not o:
|
||||
continue
|
||||
|
||||
o.quota_usage = seafserv_threaded_rpc.get_org_quota_usage(o.org_id)
|
||||
o.total_quota = seafserv_threaded_rpc.get_org_quota(o.org_id)
|
||||
o.expiration = e.expire_date
|
||||
o.is_expired = True if e.expire_date < timezone.now() else False
|
||||
orgs.append(o)
|
||||
|
||||
return render_to_response('sysadmin/sys_org_admin.html', {
|
||||
'orgs': orgs,
|
||||
'enable_org_plan': enable_org_plan,
|
||||
'hide_paginator': True,
|
||||
'paid_page': True,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
orgs_plus_one = ccnet_threaded_rpc.get_all_orgs(per_page * (current_page - 1),
|
||||
per_page + 1)
|
||||
if len(orgs_plus_one) == per_page + 1:
|
||||
page_next = True
|
||||
else:
|
||||
page_next = False
|
||||
|
||||
orgs = orgs_plus_one[:per_page]
|
||||
|
||||
if ENABLE_TRIAL_ACCOUNT:
|
||||
trial_orgs = TrialAccount.objects.filter(user_or_org__in=[x.org_id for x in orgs])
|
||||
else:
|
||||
trial_orgs = []
|
||||
|
||||
for org in orgs:
|
||||
org.quota_usage = seafserv_threaded_rpc.get_org_quota_usage(org.org_id)
|
||||
org.total_quota = seafserv_threaded_rpc.get_org_quota(org.org_id)
|
||||
|
||||
from seahub_extra.organizations.settings import ORG_TRIAL_DAYS
|
||||
if ORG_TRIAL_DAYS > 0:
|
||||
from datetime import timedelta
|
||||
org.expiration = datetime.datetime.fromtimestamp(org.ctime / 1e6) + timedelta(days=ORG_TRIAL_DAYS)
|
||||
|
||||
org.trial_info = None
|
||||
for trial_org in trial_orgs:
|
||||
if trial_org.user_or_org == str(org.org_id):
|
||||
org.trial_info = {'expire_date': trial_org.expire_date}
|
||||
if trial_org.expire_date:
|
||||
org.expiration = trial_org.expire_date
|
||||
|
||||
if len(orgs_plus_one) == per_page + 1:
|
||||
page_next = True
|
||||
else:
|
||||
page_next = False
|
||||
if org.expiration:
|
||||
org.is_expired = True if org.expiration < timezone.now() else False
|
||||
else:
|
||||
org.is_expired = False
|
||||
|
||||
return render_to_response('sysadmin/sys_org_admin.html', {
|
||||
'orgs': orgs,
|
||||
@@ -1177,8 +1253,43 @@ def sys_org_admin(request):
|
||||
'next_page': current_page+1,
|
||||
'per_page': per_page,
|
||||
'page_next': page_next,
|
||||
'enable_org_plan': enable_org_plan,
|
||||
'all_page': True,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def sys_org_search(request):
|
||||
org_name = request.GET.get('name', '').lower()
|
||||
creator = request.GET.get('creator', '').lower()
|
||||
if not org_name and not creator:
|
||||
return HttpResponseRedirect(reverse('sys_org_admin'))
|
||||
|
||||
orgs = []
|
||||
orgs_all = ccnet_threaded_rpc.get_all_orgs(-1, -1)
|
||||
|
||||
if org_name and creator:
|
||||
for o in orgs_all:
|
||||
if org_name in o.org_name.lower() and creator in o.creator.lower():
|
||||
orgs.append(o)
|
||||
else:
|
||||
if org_name:
|
||||
for o in orgs_all:
|
||||
if org_name in o.org_name.lower():
|
||||
orgs.append(o)
|
||||
|
||||
if creator:
|
||||
for o in orgs_all:
|
||||
if creator in o.creator.lower():
|
||||
orgs.append(o)
|
||||
|
||||
return render_to_response(
|
||||
'sysadmin/sys_org_search.html', {
|
||||
'orgs': orgs,
|
||||
'name': org_name,
|
||||
'creator': creator,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def sys_org_rename(request, org_id):
|
||||
@@ -1200,6 +1311,38 @@ def sys_org_rename(request, org_id):
|
||||
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
@login_required
|
||||
@require_POST
|
||||
@sys_staff_required
|
||||
def sys_org_remove(request, org_id):
|
||||
"""Remove an org and all members/repos/groups.
|
||||
|
||||
Arguments:
|
||||
- `request`:
|
||||
- `org_id`:
|
||||
"""
|
||||
org_id = int(org_id)
|
||||
org = ccnet_threaded_rpc.get_org_by_id(org_id)
|
||||
users = ccnet_threaded_rpc.get_org_emailusers(org.url_prefix, -1, -1)
|
||||
for u in users:
|
||||
ccnet_threaded_rpc.remove_org_user(org_id, u.email)
|
||||
|
||||
groups = ccnet_threaded_rpc.get_org_groups(org.org_id, -1, -1)
|
||||
for g in groups:
|
||||
ccnet_threaded_rpc.remove_org_group(org_id, g.gid)
|
||||
|
||||
# remove org repos
|
||||
seafserv_threaded_rpc.remove_org_repo_by_org_id(org_id)
|
||||
|
||||
# remove org
|
||||
ccnet_threaded_rpc.remove_org(org_id)
|
||||
|
||||
messages.success(request, _(u'Successfully deleted.'))
|
||||
|
||||
referer = request.META.get('HTTP_REFERER', None)
|
||||
next = reverse('sys_org_admin') if referer is None else referer
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
@login_required_ajax
|
||||
@sys_staff_required
|
||||
def sys_org_set_member_quota(request, org_id):
|
||||
@@ -1369,6 +1512,36 @@ def sys_publink_admin(request):
|
||||
},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def sys_publink_remove(request):
|
||||
"""Remove share links.
|
||||
"""
|
||||
token = request.GET.get('t')
|
||||
|
||||
FileShare.objects.filter(token=token).delete()
|
||||
next = request.META.get('HTTP_REFERER', None)
|
||||
if not next:
|
||||
next = reverse('share_admin')
|
||||
|
||||
messages.success(request, _(u'Removed successfully'))
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def sys_upload_link_remove(request):
|
||||
"""Remove shared upload links.
|
||||
"""
|
||||
token = request.GET.get('t')
|
||||
|
||||
UploadLinkShare.objects.filter(token=token).delete()
|
||||
next = request.META.get('HTTP_REFERER', None)
|
||||
if not next:
|
||||
next = reverse('share_admin')
|
||||
|
||||
messages.success(request, _(u'Removed successfully'))
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def user_search(request):
|
||||
@@ -1453,9 +1626,44 @@ def sys_repo_transfer(request):
|
||||
pass
|
||||
|
||||
seafile_api.set_repo_owner(repo_id, new_owner)
|
||||
|
||||
messages.success(request, _(u'Successfully transfered.'))
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
@require_POST
|
||||
def sys_repo_delete(request, repo_id):
|
||||
"""Delete a repo.
|
||||
"""
|
||||
next = request.META.get('HTTP_REFERER', None)
|
||||
if not next:
|
||||
next = reverse(sys_repo_admin)
|
||||
|
||||
if get_system_default_repo_id() == repo_id:
|
||||
messages.error(request, _('System library can not be deleted.'))
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
repo = seafile_api.get_repo(repo_id)
|
||||
repo_name = repo.name
|
||||
|
||||
if MULTI_TENANCY:
|
||||
org_id = seafserv_threaded_rpc.get_org_id_by_repo_id(repo_id)
|
||||
usernames = get_related_users_by_org_repo(org_id, repo_id)
|
||||
repo_owner = seafile_api.get_org_repo_owner(repo_id)
|
||||
else:
|
||||
org_id = -1
|
||||
usernames = get_related_users_by_repo(repo_id)
|
||||
repo_owner = seafile_api.get_repo_owner(repo_id)
|
||||
|
||||
seafile_api.remove_repo(repo_id)
|
||||
repo_deleted.send(sender=None, org_id=org_id, usernames=usernames,
|
||||
repo_owner=repo_owner, repo_id=repo_id,
|
||||
repo_name=repo_name)
|
||||
|
||||
messages.success(request, _(u'Successfully deleted.'))
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def sys_traffic_admin(request):
|
||||
|
Reference in New Issue
Block a user