mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-20 10:58:33 +00:00
Seperate personal quota and share quota.
This commit is contained in:
@@ -89,9 +89,7 @@ from seaserv import seafserv_rpc, seafserv_threaded_rpc, server_repo_size, \
|
||||
list_personal_repos_by_owner, check_quota, \
|
||||
list_share_repos, get_group_repos_by_owner, get_group_repoids, \
|
||||
list_inner_pub_repos_by_owner, \
|
||||
remove_share, unshare_group_repo, \
|
||||
unset_inner_pub_repo, get_user_quota, \
|
||||
get_user_share_usage, get_user_quota_usage, CALC_SHARE_USAGE, get_group, \
|
||||
remove_share, unshare_group_repo, unset_inner_pub_repo, get_group, \
|
||||
get_commit, get_file_id_by_path, MAX_DOWNLOAD_DIR_SIZE, edit_repo, \
|
||||
ccnet_threaded_rpc, get_personal_groups, seafile_api, check_group_staff
|
||||
|
||||
@@ -223,14 +221,8 @@ class Account(APIView):
|
||||
info['is_staff'] = user.is_staff
|
||||
info['is_active'] = user.is_active
|
||||
info['create_time'] = user.ctime
|
||||
|
||||
info['total'] = get_user_quota(email)
|
||||
if CALC_SHARE_USAGE:
|
||||
my_usage = get_user_quota_usage(email)
|
||||
share_usage = get_user_share_usage(email)
|
||||
info['usage'] = my_usage + share_usage
|
||||
else:
|
||||
info['usage'] = get_user_quota_usage(email)
|
||||
info['total'] = seafile_api.get_user_quota(email)
|
||||
info['usage'] = seafile_api.get_user_quota_usage(email)
|
||||
|
||||
return Response(info)
|
||||
|
||||
@@ -307,15 +299,9 @@ class AccountInfo(APIView):
|
||||
info = {}
|
||||
email = request.user.username
|
||||
info['email'] = email
|
||||
info['total'] = get_user_quota(email)
|
||||
info['nickname'] = email2nickname(email)
|
||||
|
||||
if CALC_SHARE_USAGE:
|
||||
my_usage = get_user_quota_usage(email)
|
||||
share_usage = get_user_share_usage(email)
|
||||
info['usage'] = my_usage + share_usage
|
||||
else:
|
||||
info['usage'] = get_user_quota_usage(email)
|
||||
info['total'] = seafile_api.get_user_quota(email)
|
||||
info['usage'] = seafile_api.get_user_quota_usage(email)
|
||||
|
||||
return Response(info)
|
||||
|
||||
|
@@ -172,7 +172,8 @@ def share_to_user(request, repo, to_user, permission):
|
||||
messages.success(request, msg)
|
||||
|
||||
def check_user_share_quota(username, repo, users=[], groups=[]):
|
||||
"""Check whether user has enough quota when share repo to users/groups.
|
||||
"""Check whether user has enough share quota when share repo to
|
||||
users/groups. Only used for cloud service.
|
||||
"""
|
||||
if not users and not groups:
|
||||
return True
|
||||
@@ -181,8 +182,7 @@ def check_user_share_quota(username, repo, users=[], groups=[]):
|
||||
return True
|
||||
|
||||
check_pass = False
|
||||
quota = seafile_api.get_user_quota(username)
|
||||
self_usage = seafile_api.get_user_self_usage(username)
|
||||
share_quota = seafile_api.get_user_share_quota(username)
|
||||
current_share_usage = seafile_api.get_user_share_usage(username)
|
||||
|
||||
share_usage = 0
|
||||
@@ -192,10 +192,10 @@ def check_user_share_quota(username, repo, users=[], groups=[]):
|
||||
if groups:
|
||||
grp_members = []
|
||||
for group in groups:
|
||||
grp_members += [ e.user_name for e in seaserv.get_group_members(group.id)]
|
||||
grp_members += [e.user_name for e in seaserv.get_group_members(group.id)]
|
||||
grp_members = set(grp_members)
|
||||
share_usage += seafile_api.get_repo_size(repo.id) * (len(grp_members) -1)
|
||||
if share_usage + self_usage + current_share_usage < quota:
|
||||
share_usage += seafile_api.get_repo_size(repo.id) * (len(grp_members) - 1)
|
||||
if share_usage + current_share_usage < share_quota:
|
||||
check_pass = True
|
||||
|
||||
return check_pass
|
||||
|
@@ -1,20 +1,23 @@
|
||||
{% load i18n %}
|
||||
{% if CALC_SHARE_USAGE %}
|
||||
<div class="item">
|
||||
<p>{% trans "Used:" %} {{ quota_usage|filesizeformat }} {% if quota > 0 %}/ {{ quota|filesizeformat }} {% endif %}</p>
|
||||
{% if quota > 0 %}
|
||||
<a href="http://www.seafile.com/{% if LANGUAGE_CODE != 'zh-cn' %}en/{% endif %}help/quota/" target="_blank" id="quota-bar"><span id="my-usage" title="{% trans "Self" %}" class="usage" style="width:{{rates.my_usage}};"></span><span id="share-usage" title="{% trans "Sharing" %}" class="usage" style="width:{{rates.share_usage}};"></span></a>
|
||||
<p>{% trans "Self:" %} {{ space_usage|filesizeformat }} {% if space_quota > 0 %}/ {{ space_quota|filesizeformat }} {% endif %}</p>
|
||||
|
||||
{% if not org %}
|
||||
<p>{% trans "Sharing:" %} {{ share_usage|filesizeformat }} {% if share_quota > 0 %}/ {{ share_quota|filesizeformat }} {% endif %}</p>
|
||||
{% endif %}
|
||||
<p id="usage-details">{% trans "Self" %} {{ my_usage|filesizeformat }}, {% trans "Sharing" %} {{ share_usage|filesizeformat }}</p>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="item">
|
||||
<p>{% trans "Used:" %} {{ quota_usage|filesizeformat }} {% if quota > 0 %}/ {{ quota|filesizeformat }} {% endif %}</p>
|
||||
{% if quota > 0 %}
|
||||
<div id="quota-bar"><span id="quota-usage" class="usage" style="width:{{rates.quota_usage}};"></span></div>
|
||||
|
||||
{% if space_quota > 0 or share_quota > 0 %}
|
||||
<div id="quota-bar">
|
||||
{% if show_quota_help %}
|
||||
<a href="http://www.seafile.com/{% if LANGUAGE_CODE != 'zh-cn' %}en/{% endif %}help/quota/" target="_blank">
|
||||
{% endif %}
|
||||
<span id="quota-usage" class="usage" style="width:{{rates.space_usage}};"></span><span id="share-usage" class="usage" style="width:{{rates.share_usage}};"></span>
|
||||
{% if show_quota_help %}
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if TRAFFIC_STATS_ENABLED %}
|
||||
<a class="item" href="http://www.seafile.com/{% if LANGUAGE_CODE != 'zh-cn' %}en/{% endif %}help/traffic/" target="_blank" id="traffic-stat">{% trans "Traffic this month:" %} {{ traffic_stat|filesizeformat }}</a>
|
||||
|
@@ -3,10 +3,10 @@
|
||||
<tr>
|
||||
<th width="25%">{% trans "Email" %}</th>
|
||||
<th width="12%">{% trans "Status" %}</th>
|
||||
<th width="11%">{% trans "Role" %}</th>
|
||||
<th width="15%">{% trans "Space Used" %}</th>
|
||||
<th width="9%">{% trans "Role" %}</th>
|
||||
<th width="18%">{% trans "Space/Share Used" %}</th>
|
||||
<th width="22%">{% trans "Create At / Last Login" %}</th>
|
||||
<th width="15%">{% trans "Operations" %}</th>
|
||||
<th width="14%">{% trans "Operations" %}</th>
|
||||
</tr>
|
||||
|
||||
{% for user in users %}
|
||||
@@ -53,11 +53,10 @@
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{% if CALC_SHARE_USAGE %}
|
||||
{{ user.self_usage|filesizeformat }} + {{ user.share_usage|filesizeformat }} {% if user.quota > 0 %} / {{ user.quota|filesizeformat }} {% endif %}
|
||||
{% else %}
|
||||
{{ user.self_usage|filesizeformat }} {% if user.quota > 0 %} / {{ user.quota|filesizeformat }} {% endif %}
|
||||
<td style="font-size:11px;">
|
||||
<p> {{ user.space_usage|filesizeformat }} {% if user.space_quota > 0 %} / {{ user.space_quota|filesizeformat }} {% endif %} </p>
|
||||
{% if not user.org %}
|
||||
<p> {{ user.share_usage|filesizeformat }} {% if user.share_quota > 0 %} / {{ user.share_quota|filesizeformat }} {% endif %} </p>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
|
@@ -40,13 +40,9 @@
|
||||
</dl>
|
||||
|
||||
<h3 class="hd">{% trans "Space Used" %}</h3>
|
||||
{% if CALC_SHARE_USAGE %}
|
||||
<p>{% trans "Total" %}: {{ quota_usage|filesizeformat }} {% if quota > 0 %}/ {{ quota|filesizeformat }} {% endif %}</p>
|
||||
<p>{% trans "Used" %}: {{ my_usage|filesizeformat }}</p>
|
||||
<p>{% trans "Sharing" %}: {{ share_usage|filesizeformat }}</p>
|
||||
{% else %}
|
||||
<p>{{ quota_usage|filesizeformat }} {% if quota > 0 %}/ {{ quota|filesizeformat }} {% endif %}</p>
|
||||
{% endif %}
|
||||
<p>{% trans "Self" %}: {{ space_usage|filesizeformat }} {% if space_quota > 0 %} / {{ space_quota|filesizeformat }} {% endif %}</p>
|
||||
<p>{% trans "Sharing" %}: {{ share_usage|filesizeformat }} {% if share_quota > 0 %} / {{ share_quota|filesizeformat }} {% endif %}</p>
|
||||
|
||||
<a href="#" id="set-quota">{% trans "Set Quota" %}</a>
|
||||
</div>
|
||||
<form id="set-quota-form" method="post" class="hide">{% csrf_token %}
|
||||
|
@@ -1380,33 +1380,39 @@ def repo_remove(request, repo_id):
|
||||
@login_required_ajax
|
||||
def space_and_traffic(request):
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
|
||||
username = request.user.username
|
||||
|
||||
# space & quota calculation
|
||||
org = ccnet_threaded_rpc.get_orgs_by_user(username)
|
||||
if not org:
|
||||
quota = seafserv_threaded_rpc.get_user_quota(username)
|
||||
my_usage = get_user_quota_usage(username)
|
||||
space_quota = seafile_api.get_user_quota(username)
|
||||
space_usage = seafile_api.get_user_self_usage(username)
|
||||
share_quota = seafile_api.get_user_share_quota(username)
|
||||
share_usage = seafile_api.get_user_share_usage(username)
|
||||
else:
|
||||
org_id = org[0].org_id
|
||||
quota = seafserv_threaded_rpc.get_org_user_quota(org_id,
|
||||
username)
|
||||
my_usage = seafserv_threaded_rpc.get_org_user_quota_usage(org_id,
|
||||
username)
|
||||
space_quota = seafserv_threaded_rpc.get_org_user_quota(org_id,
|
||||
username)
|
||||
space_usage = seafserv_threaded_rpc.get_org_user_quota_usage(
|
||||
org_id, username)
|
||||
share_quota = 0 # no share quota/usage for org account
|
||||
share_usage = 0
|
||||
|
||||
rates = {}
|
||||
if CALC_SHARE_USAGE:
|
||||
share_usage = get_user_share_usage(username)
|
||||
quota_usage = my_usage + share_usage
|
||||
if quota > 0:
|
||||
rates['my_usage'] = str(float(my_usage)/quota * 100) + '%'
|
||||
rates['share_usage'] = str(float(share_usage)/quota * 100) + '%'
|
||||
else:
|
||||
quota_usage = my_usage
|
||||
share_usage = 0
|
||||
if quota > 0:
|
||||
rates['quota_usage'] = str(float(my_usage)/quota * 100) + '%'
|
||||
rates['space_quota'] = space_quota
|
||||
rates['share_quota'] = share_quota
|
||||
total_quota = space_quota + share_quota
|
||||
if space_quota > 0:
|
||||
rates['space_usage'] = str(float(space_usage) / total_quota * 100) + '%'
|
||||
else: # no space quota set in config
|
||||
rates['space_usage'] = '0%'
|
||||
|
||||
if share_quota > 0:
|
||||
rates['share_usage'] = str(float(share_usage) / total_quota * 100) + '%'
|
||||
else: # no share quota set in config
|
||||
rates['share_usage'] = '0%'
|
||||
|
||||
# traffic calculation
|
||||
traffic_stat = 0
|
||||
if TRAFFIC_STATS_ENABLED:
|
||||
# User's network traffic stat in this month
|
||||
@@ -1419,6 +1425,7 @@ def space_and_traffic(request):
|
||||
if stat:
|
||||
traffic_stat = stat['file_view'] + stat['file_download'] + stat['dir_download']
|
||||
|
||||
# payment url, TODO: need to remove from here.
|
||||
payment_url = ''
|
||||
ENABLE_PAYMENT = getattr(settings, 'ENABLE_PAYMENT', False)
|
||||
if ENABLE_PAYMENT:
|
||||
@@ -1432,13 +1439,14 @@ def space_and_traffic(request):
|
||||
else:
|
||||
# payment for personal account
|
||||
payment_url = reverse('plan')
|
||||
|
||||
|
||||
ctx = {
|
||||
"CALC_SHARE_USAGE": CALC_SHARE_USAGE,
|
||||
"quota": quota,
|
||||
"quota_usage": quota_usage,
|
||||
"org": org,
|
||||
"space_quota": space_quota,
|
||||
"space_usage": space_usage,
|
||||
"share_quota": share_quota,
|
||||
"share_usage": share_usage,
|
||||
"my_usage": my_usage,
|
||||
"show_quota_help": not CALC_SHARE_USAGE,
|
||||
"rates": rates,
|
||||
"TRAFFIC_STATS_ENABLED": TRAFFIC_STATS_ENABLED,
|
||||
"traffic_stat": traffic_stat,
|
||||
|
@@ -149,7 +149,30 @@ def sys_repo_search(request):
|
||||
'name': repo_name,
|
||||
'owner': owner,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def _populate_user_quota_usage(user):
|
||||
"""Populate space/share quota to user.
|
||||
|
||||
Arguments:
|
||||
- `user`:
|
||||
"""
|
||||
orgs = ccnet_threaded_rpc.get_orgs_by_user(user.email)
|
||||
try:
|
||||
if orgs:
|
||||
user.org = orgs[0]
|
||||
org_id = user.org.org_id
|
||||
user.space_usage = seafserv_threaded_rpc.get_org_user_quota_usage(org_id, user.email)
|
||||
user.space_quota = seafserv_threaded_rpc.get_org_user_quota(org_id, user.email)
|
||||
user.share_usage = user.share_quota = 0
|
||||
else:
|
||||
user.space_usage = seafile_api.get_user_self_usage(user.email)
|
||||
user.share_usage = seafile_api.get_user_share_usage(user.email)
|
||||
user.space_quota = seafile_api.get_user_quota(user.email)
|
||||
user.share_quota = seafile_api.get_user_share_quota(user.email)
|
||||
except SearpcError as e:
|
||||
logger.error(e)
|
||||
user.space_usage = user.space_quota = user.share_usage = user.share_quota = -1
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def sys_user_admin(request):
|
||||
@@ -174,22 +197,7 @@ def sys_user_admin(request):
|
||||
if user.props.id == request.user.id:
|
||||
user.is_self = True
|
||||
|
||||
org = ccnet_threaded_rpc.get_orgs_by_user(user.email)
|
||||
try:
|
||||
if not org:
|
||||
user.self_usage = seafile_api.get_user_self_usage(user.email)
|
||||
user.share_usage = seafile_api.get_user_share_usage(user.email)
|
||||
user.quota = seafile_api.get_user_quota(user.email)
|
||||
else:
|
||||
user.org = org[0]
|
||||
org_id = user.org.org_id
|
||||
user.self_usage = seafserv_threaded_rpc.get_org_user_quota_usage(org_id, user.email)
|
||||
user.share_usage = 0 #seafile_api.get_user_share_usage(user.email)
|
||||
user.quota = seafserv_threaded_rpc.get_org_user_quota(org_id, user.email)
|
||||
except:
|
||||
user.self_usage = -1
|
||||
user.share_usage = -1
|
||||
user.quota = -1
|
||||
_populate_user_quota_usage(user)
|
||||
|
||||
# check user's role
|
||||
if user.role == GUEST_USER:
|
||||
@@ -247,14 +255,8 @@ def sys_user_admin_ldap(request):
|
||||
for user in users:
|
||||
if user.props.id == request.user.id:
|
||||
user.is_self = True
|
||||
try:
|
||||
user.self_usage = seafile_api.get_user_self_usage(user.email)
|
||||
user.share_usage = seafile_api.get_user_share_usage(user.email)
|
||||
user.quota = seafile_api.get_user_quota(user.email)
|
||||
except:
|
||||
user.self_usage = -1
|
||||
user.share_usage = -1
|
||||
user.quota = -1
|
||||
|
||||
_populate_user_quota_usage(user)
|
||||
|
||||
# populate user last login time
|
||||
user.last_login = None
|
||||
@@ -294,14 +296,9 @@ def sys_user_admin_admins(request):
|
||||
for user in admin_users:
|
||||
if user.props.id == request.user.id:
|
||||
user.is_self = True
|
||||
try:
|
||||
user.self_usage = seafile_api.get_user_self_usage(user.email)
|
||||
user.share_usage = seafile_api.get_user_share_usage(user.email)
|
||||
user.quota = seafile_api.get_user_quota(user.email)
|
||||
except:
|
||||
user.self_usage = -1
|
||||
user.share_usage = -1
|
||||
user.quota = -1
|
||||
|
||||
_populate_user_quota_usage(user)
|
||||
|
||||
# check user's role
|
||||
if user.role == GUEST_USER:
|
||||
user.is_guest = True
|
||||
@@ -323,7 +320,7 @@ def sys_user_admin_admins(request):
|
||||
'have_ldap': have_ldap,
|
||||
'default_user': DEFAULT_USER,
|
||||
'guest_user': GUEST_USER,
|
||||
}, context_instance=RequestContext(request))
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
@@ -333,26 +330,17 @@ def user_info(request, email):
|
||||
org = ccnet_threaded_rpc.get_orgs_by_user(email)
|
||||
org_name = None
|
||||
if not org:
|
||||
my_usage = seafile_api.get_user_self_usage(email)
|
||||
quota = seafile_api.get_user_quota(email)
|
||||
space_usage = seafile_api.get_user_self_usage(email)
|
||||
space_quota = seafile_api.get_user_quota(email)
|
||||
share_usage = seafile_api.get_user_share_usage(email)
|
||||
share_quota = seafile_api.get_user_share_quota(email)
|
||||
else:
|
||||
org_id = org[0].org_id
|
||||
my_usage =seafserv_threaded_rpc. \
|
||||
get_org_user_quota_usage(org_id, email)
|
||||
quota = seafserv_threaded_rpc. \
|
||||
get_org_user_quota(org_id, email)
|
||||
org_name = org[0].org_name
|
||||
|
||||
if CALC_SHARE_USAGE:
|
||||
try:
|
||||
share_usage = seafile_api.get_user_share_usage(email)
|
||||
except SearpcError, e:
|
||||
logger.error(e)
|
||||
share_usage = 0
|
||||
quota_usage = my_usage + share_usage
|
||||
else:
|
||||
share_usage = 0
|
||||
quota_usage = my_usage
|
||||
space_usage = seafserv_threaded_rpc.get_org_user_quota_usage(org_id,
|
||||
email)
|
||||
space_quota = seafserv_threaded_rpc.get_org_user_quota(org_id, email)
|
||||
share_usage = share_quota = 0
|
||||
|
||||
# Repos that are share to user
|
||||
in_repos = seafile_api.get_share_in_repo_list(email, -1, -1)
|
||||
@@ -421,18 +409,17 @@ def user_info(request, email):
|
||||
return render_to_response(
|
||||
'sysadmin/userinfo.html', {
|
||||
'owned_repos': owned_repos,
|
||||
'quota': quota,
|
||||
'quota_usage': quota_usage,
|
||||
'CALC_SHARE_USAGE': CALC_SHARE_USAGE,
|
||||
'space_quota': space_quota,
|
||||
'space_usage': space_usage,
|
||||
'share_quota': share_quota,
|
||||
'share_usage': share_usage,
|
||||
'my_usage': my_usage,
|
||||
'in_repos': in_repos,
|
||||
'email': email,
|
||||
'profile': profile,
|
||||
'd_profile': d_profile,
|
||||
'org_name': org_name,
|
||||
"user_shared_links": user_shared_links,
|
||||
}, context_instance=RequestContext(request))
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@login_required_ajax
|
||||
@sys_staff_required
|
||||
@@ -1054,23 +1041,7 @@ def user_search(request):
|
||||
users = ccnet_threaded_rpc.search_emailusers(email, -1, -1)
|
||||
last_logins = UserLastLogin.objects.filter(username__in=[x.email for x in users])
|
||||
for user in users:
|
||||
org = ccnet_threaded_rpc.get_orgs_by_user(user.email)
|
||||
try:
|
||||
if not org:
|
||||
user.self_usage = seafile_api.get_user_self_usage(user.email)
|
||||
user.share_usage = seafile_api.get_user_share_usage(user.email)
|
||||
user.quota = seafile_api.get_user_quota(user.email)
|
||||
else:
|
||||
user.org = org[0]
|
||||
org_id = user.org.org_id
|
||||
user.self_usage = seafserv_threaded_rpc.get_org_user_quota_usage(org_id, user.email)
|
||||
user.share_usage = 0
|
||||
user.quota = seafserv_threaded_rpc.get_org_user_quota(org_id, user.email)
|
||||
except SearpcError as e:
|
||||
logger.error(e)
|
||||
user.self_usage = -1
|
||||
user.share_usage = -1
|
||||
user.quota = -1
|
||||
_populate_user_quota_usage(user)
|
||||
|
||||
# check user's role
|
||||
if user.role == GUEST_USER:
|
||||
@@ -1091,7 +1062,7 @@ def user_search(request):
|
||||
'guest_user': GUEST_USER,
|
||||
'enable_guest': ENABLE_GUEST,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def sys_repo_transfer(request):
|
||||
|
Reference in New Issue
Block a user