diff --git a/seahub/api2/views.py b/seahub/api2/views.py index ec4ea4dec2..5d9995bacf 100644 --- a/seahub/api2/views.py +++ b/seahub/api2/views.py @@ -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) diff --git a/seahub/share/views.py b/seahub/share/views.py index 51c12c09fe..c03999b464 100644 --- a/seahub/share/views.py +++ b/seahub/share/views.py @@ -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 diff --git a/seahub/templates/snippets/space_and_traffic.html b/seahub/templates/snippets/space_and_traffic.html index d9250db19d..b53bdaa3a5 100644 --- a/seahub/templates/snippets/space_and_traffic.html +++ b/seahub/templates/snippets/space_and_traffic.html @@ -1,20 +1,23 @@ {% load i18n %} -{% if CALC_SHARE_USAGE %}
-

{% trans "Used:" %} {{ quota_usage|filesizeformat }} {% if quota > 0 %}/ {{ quota|filesizeformat }} {% endif %}

- {% if quota > 0 %} - +

{% trans "Self:" %} {{ space_usage|filesizeformat }} {% if space_quota > 0 %}/ {{ space_quota|filesizeformat }} {% endif %}

+ + {% if not org %} +

{% trans "Sharing:" %} {{ share_usage|filesizeformat }} {% if share_quota > 0 %}/ {{ share_quota|filesizeformat }} {% endif %}

{% endif %} -

{% trans "Self" %} {{ my_usage|filesizeformat }}, {% trans "Sharing" %} {{ share_usage|filesizeformat }}

-
-{% else %} -
-

{% trans "Used:" %} {{ quota_usage|filesizeformat }} {% if quota > 0 %}/ {{ quota|filesizeformat }} {% endif %}

- {% if quota > 0 %} -
+ + {% if space_quota > 0 or share_quota > 0 %} +
+ {% if show_quota_help %} + + {% endif %} + + {% if show_quota_help %} + + {% endif %} +
{% endif %}
-{% endif %} {% if TRAFFIC_STATS_ENABLED %} {% trans "Traffic this month:" %} {{ traffic_stat|filesizeformat }} diff --git a/seahub/templates/sysadmin/useradmin_table.html b/seahub/templates/sysadmin/useradmin_table.html index 7b9c1f957b..ff9752487f 100644 --- a/seahub/templates/sysadmin/useradmin_table.html +++ b/seahub/templates/sysadmin/useradmin_table.html @@ -3,10 +3,10 @@ {% trans "Email" %} {% trans "Status" %} - {% trans "Role" %} - {% trans "Space Used" %} + {% trans "Role" %} + {% trans "Space/Share Used" %} {% trans "Create At / Last Login" %} - {% trans "Operations" %} + {% trans "Operations" %} {% for user in users %} @@ -53,11 +53,10 @@ {% endif %} - - {% 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 %} + +

{{ user.space_usage|filesizeformat }} {% if user.space_quota > 0 %} / {{ user.space_quota|filesizeformat }} {% endif %}

+ {% if not user.org %} +

{{ user.share_usage|filesizeformat }} {% if user.share_quota > 0 %} / {{ user.share_quota|filesizeformat }} {% endif %}

{% endif %} diff --git a/seahub/templates/sysadmin/userinfo.html b/seahub/templates/sysadmin/userinfo.html index 02fb02adb4..3b75b501da 100644 --- a/seahub/templates/sysadmin/userinfo.html +++ b/seahub/templates/sysadmin/userinfo.html @@ -40,13 +40,9 @@

{% trans "Space Used" %}

- {% if CALC_SHARE_USAGE %} -

{% trans "Total" %}: {{ quota_usage|filesizeformat }} {% if quota > 0 %}/ {{ quota|filesizeformat }} {% endif %}

-

{% trans "Used" %}: {{ my_usage|filesizeformat }}

-

{% trans "Sharing" %}: {{ share_usage|filesizeformat }}

- {% else %} -

{{ quota_usage|filesizeformat }} {% if quota > 0 %}/ {{ quota|filesizeformat }} {% endif %}

- {% endif %} +

{% trans "Self" %}: {{ space_usage|filesizeformat }} {% if space_quota > 0 %} / {{ space_quota|filesizeformat }} {% endif %}

+

{% trans "Sharing" %}: {{ share_usage|filesizeformat }} {% if share_quota > 0 %} / {{ share_quota|filesizeformat }} {% endif %}

+ {% trans "Set Quota" %}
{% csrf_token %} diff --git a/seahub/views/ajax.py b/seahub/views/ajax.py index 478bf92680..3a55ec9e63 100644 --- a/seahub/views/ajax.py +++ b/seahub/views/ajax.py @@ -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, diff --git a/seahub/views/sysadmin.py b/seahub/views/sysadmin.py index 0e5c7e0e68..45dab7e423 100644 --- a/seahub/views/sysadmin.py +++ b/seahub/views/sysadmin.py @@ -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):