mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-21 19:37:28 +00:00
[sysadmin] List paid users and orgs
This commit is contained in:
@@ -9,8 +9,13 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block right_panel %}
|
{% block right_panel %}
|
||||||
<div class="hd ovhd">
|
<div class="tabnav">
|
||||||
<h3 class="fleft">{% trans "All Organizations" %}</h3>
|
<ul class="tabnav-tabs">
|
||||||
|
<li class="tabnav-tab {% if all_page %}tabnav-tab-cur{% endif %}"><a href="{% url 'sys_org_admin' %}">{% trans "All" %}</a></li>
|
||||||
|
{% if enable_org_plan %}
|
||||||
|
<li class="tabnav-tab {% if paid_page %}tabnav-tab-cur{% endif %}"><a href="{% url 'sys_org_admin' %}?filter=paid">{% trans "Paid" %}</a></li>
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
<button id="add-btn" class="fright">{% trans "Add organization" %}</button>
|
<button id="add-btn" class="fright">{% trans "Add organization" %}</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -34,11 +39,16 @@
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
{% if orgs %}
|
{% if orgs %}
|
||||||
|
|
||||||
{% include "sysadmin/org_admin_table.html" %}
|
{% include "sysadmin/org_admin_table.html" %}
|
||||||
{% include "snippets/admin_paginator.html" %}
|
|
||||||
|
{% if not hide_paginator %}
|
||||||
|
{% include "snippets/admin_paginator.html" %}
|
||||||
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>{% trans "None." %}</p>
|
<p>{% trans "None." %}</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block extra_script %}
|
{% block extra_script %}
|
||||||
|
@@ -17,6 +17,9 @@
|
|||||||
<li class="tabnav-tab"><a href="{% url 'sys_useradmin_ldap_imported' %}">{% trans "LDAP(imported)" %}</a></li>
|
<li class="tabnav-tab"><a href="{% url 'sys_useradmin_ldap_imported' %}">{% trans "LDAP(imported)" %}</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<li class="tabnav-tab"><a href="{% url 'sys_useradmin_admins' %}">{% trans "Admins" %}</a></li>
|
<li class="tabnav-tab"><a href="{% url 'sys_useradmin_admins' %}">{% trans "Admins" %}</a></li>
|
||||||
|
{% if enable_user_plan %}
|
||||||
|
<li class="tabnav-tab"><a href="{% url 'sys_useradmin' %}?filter=paid">{% trans "Paid" %}</a></li>
|
||||||
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
<div class="fright">
|
<div class="fright">
|
||||||
<button id="import-users-btn"><span class="icon-upload-alt"></span>{% trans "Import users" %}</button>
|
<button id="import-users-btn"><span class="icon-upload-alt"></span>{% trans "Import users" %}</button>
|
||||||
|
39
seahub/templates/sysadmin/sys_useradmin_paid.html
Normal file
39
seahub/templates/sysadmin/sys_useradmin_paid.html
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{% extends "sysadmin/base.html" %}
|
||||||
|
{% load seahub_tags i18n %}
|
||||||
|
{% block cur_users %}tab-cur{% endblock %}
|
||||||
|
|
||||||
|
{% block left_panel %}{{block.super}}
|
||||||
|
<form action="{% url 'user_search' %}" method="get" class="side-search-form">
|
||||||
|
<input type="text" name="email" class="input" value="" placeholder="{% trans "Search users..." %}" />
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block right_panel %}
|
||||||
|
<div class="tabnav ovhd">
|
||||||
|
<ul class="tabnav-tabs fleft">
|
||||||
|
<li class="tabnav-tab"><a href="{% url 'sys_useradmin' %}">{% trans "Database" %}</a></li>
|
||||||
|
{% if have_ldap %}
|
||||||
|
<li class="tabnav-tab"><a href="{% url 'sys_useradmin_ldap' %}">{% trans "LDAP" %}</a></li>
|
||||||
|
<li class="tabnav-tab"><a href="{% url 'sys_useradmin_ldap_imported' %}">{% trans "LDAP(imported)" %}</a></li>
|
||||||
|
{% endif %}
|
||||||
|
<li class="tabnav-tab"><a href="{% url 'sys_useradmin_admins' %}">{% trans "Admins" %}</a></li>
|
||||||
|
{% if enable_user_plan %}
|
||||||
|
<li class="tabnav-tab tabnav-tab-cur"><a href="{% url 'sys_useradmin' %}?filter=paid">{% trans "Paid" %}</a></li>
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% with is_admin_page=False%}
|
||||||
|
{% include "sysadmin/useradmin_table.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
|
||||||
|
<div id="activate-msg" class="hide">
|
||||||
|
<p>{% trans "Activating..., please wait" %}</p>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block extra_script %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
{% include "sysadmin/useradmin_js.html" %}
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
@@ -79,12 +79,12 @@
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{% if not user.is_self %}
|
{% if not user.is_self %}
|
||||||
<a href="#" class="remove-user-btn op vh" data-url="{% url 'user_remove' user.email %}" data-target="{{ user.props.email }}">{% trans "Delete" %}</a>
|
<a href="#" class="remove-user-btn op vh" data-url="{% url 'user_remove' user.email %}" data-target="{{ user.email }}">{% trans "Delete" %}</a>
|
||||||
{% if user.source == "DB" %}
|
{% if user.source == "DB" %}
|
||||||
<a href="#" class="reset-user-btn op vh" data-url="{% url 'user_reset' user.email %}" data-target="{{ user.props.email }}">{% trans "ResetPwd" %}</a>
|
<a href="#" class="reset-user-btn op vh" data-url="{% url 'user_reset' user.email %}" data-target="{{ user.email }}">{% trans "ResetPwd" %}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if is_admin_page %}
|
{% if is_admin_page %}
|
||||||
<a href="#" data-url="{% url 'user_remove_admin' user.email %}" data-target="{{ user.props.email }}" class="revoke-admin-btn op vh">{% trans "Revoke Admin" %}</a>
|
<a href="#" data-url="{% url 'user_remove_admin' user.email %}" data-target="{{ user.email }}" class="revoke-admin-btn op vh">{% trans "Revoke Admin" %}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
|
@@ -362,6 +362,33 @@ def _populate_user_quota_usage(user):
|
|||||||
def sys_user_admin(request):
|
def sys_user_admin(request):
|
||||||
"""List all users from database.
|
"""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:
|
||||||
|
u = User.objects.get(up.username)
|
||||||
|
_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.
|
# Make sure page request is an int. If not, deliver first page.
|
||||||
try:
|
try:
|
||||||
current_page = int(request.GET.get('page', '1'))
|
current_page = int(request.GET.get('page', '1'))
|
||||||
@@ -426,6 +453,7 @@ def sys_user_admin(request):
|
|||||||
'guest_user': GUEST_USER,
|
'guest_user': GUEST_USER,
|
||||||
'is_pro': is_pro_version(),
|
'is_pro': is_pro_version(),
|
||||||
'pro_server': pro_server,
|
'pro_server': pro_server,
|
||||||
|
'enable_user_plan': enable_user_plan,
|
||||||
}, context_instance=RequestContext(request))
|
}, context_instance=RequestContext(request))
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@@ -1148,14 +1176,44 @@ def sys_org_admin(request):
|
|||||||
current_page = 1
|
current_page = 1
|
||||||
per_page = 25
|
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)
|
||||||
|
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),
|
orgs_plus_one = ccnet_threaded_rpc.get_all_orgs(per_page * (current_page - 1),
|
||||||
per_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]
|
orgs = orgs_plus_one[:per_page]
|
||||||
|
|
||||||
if ENABLE_TRIAL_ACCOUNT:
|
if ENABLE_TRIAL_ACCOUNT:
|
||||||
trial_orgs = TrialAccount.objects.filter(user_or_org__in=[x.org_id for x in orgs])
|
trial_orgs = TrialAccount.objects.filter(user_or_org__in=[x.org_id for x in orgs])
|
||||||
else:
|
else:
|
||||||
trial_orgs = []
|
trial_orgs = []
|
||||||
|
|
||||||
for org in orgs:
|
for org in orgs:
|
||||||
org.quota_usage = seafserv_threaded_rpc.get_org_quota_usage(org.org_id)
|
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)
|
org.total_quota = seafserv_threaded_rpc.get_org_quota(org.org_id)
|
||||||
@@ -1177,11 +1235,6 @@ def sys_org_admin(request):
|
|||||||
else:
|
else:
|
||||||
org.is_expired = False
|
org.is_expired = False
|
||||||
|
|
||||||
if len(orgs_plus_one) == per_page + 1:
|
|
||||||
page_next = True
|
|
||||||
else:
|
|
||||||
page_next = False
|
|
||||||
|
|
||||||
return render_to_response('sysadmin/sys_org_admin.html', {
|
return render_to_response('sysadmin/sys_org_admin.html', {
|
||||||
'orgs': orgs,
|
'orgs': orgs,
|
||||||
'current_page': current_page,
|
'current_page': current_page,
|
||||||
@@ -1189,6 +1242,8 @@ def sys_org_admin(request):
|
|||||||
'next_page': current_page+1,
|
'next_page': current_page+1,
|
||||||
'per_page': per_page,
|
'per_page': per_page,
|
||||||
'page_next': page_next,
|
'page_next': page_next,
|
||||||
|
'enable_org_plan': enable_org_plan,
|
||||||
|
'all_page': True,
|
||||||
}, context_instance=RequestContext(request))
|
}, context_instance=RequestContext(request))
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
Reference in New Issue
Block a user