mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-20 02:48:51 +00:00
[sysadmin] Show org expiration date and search org
This commit is contained in:
28
seahub/templates/sysadmin/org_admin_table.html
Normal file
28
seahub/templates/sysadmin/org_admin_table.html
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{% load seahub_tags i18n %}
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th width="26%">{% trans "Name" %}</th>
|
||||||
|
<th width="25%">{% trans "Creator" %}</th>
|
||||||
|
<th width="17%">{% trans "Space Used" %}</th>
|
||||||
|
<th width="20%">{% trans "Created At / Expiration" %}</th>
|
||||||
|
<th width="12%">{% trans "Operations" %}</th>
|
||||||
|
</tr>
|
||||||
|
{% for org in orgs %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a href="{% url 'sys_org_info_user' org.org_id %}">{{ org.org_name }}</a>
|
||||||
|
{% if org.trial_info %}
|
||||||
|
<p style="font-size:11px;">(Trial <a href="#" class="unset-trial" data-target="{{ org.org_name }}" data-url="{% url 'remove_trial' org.org_id %}">X</a>)</p>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td><a href="{% url 'user_info' org.creator %}">{{ org.creator }}</a></td>
|
||||||
|
<td>
|
||||||
|
{{ org.quota_usage|filesizeformat }} {% if org.total_quota > 0 %} / {{ org.total_quota|filesizeformat }} {% endif %}
|
||||||
|
</td>
|
||||||
|
<td>{{ org.ctime|tsstr_sec }} <br/>
|
||||||
|
<span class="{% if org.is_expired %}error{% endif %}">{% if org.expiration %}{{ org.expiration|date:'Y-m-d H:i:s' }}{% else %}--{% endif %}</span>
|
||||||
|
</td>
|
||||||
|
<td><a href="#" data-url="{{ SITE_ROOT}}org/remove/{{ org.org_id }}/" data-target="{{ org.org_name }}" class="remove-btn op vh">{% trans "Delete" %}</a></td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
@@ -1,8 +1,13 @@
|
|||||||
{% extends "sysadmin/base.html" %}
|
{% extends "sysadmin/base.html" %}
|
||||||
{% load seahub_tags i18n %}
|
{% load seahub_tags i18n %}
|
||||||
|
|
||||||
{% block cur_org %}tab-cur{% endblock %}
|
{% block cur_org %}tab-cur{% endblock %}
|
||||||
|
|
||||||
|
{% block left_panel %}{{block.super}}
|
||||||
|
<form action="{% url 'sys_org_search' %}" method="get" class="side-search-form">
|
||||||
|
<input type="text" name="name" class="input" value="" placeholder="{% trans "Search orgs by name..." %}" />
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% block right_panel %}
|
{% block right_panel %}
|
||||||
<div class="hd ovhd">
|
<div class="hd ovhd">
|
||||||
<h3 class="fleft">{% trans "All Organizations" %}</h3>
|
<h3 class="fleft">{% trans "All Organizations" %}</h3>
|
||||||
@@ -29,35 +34,8 @@
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
{% if orgs %}
|
{% if orgs %}
|
||||||
<table>
|
{% include "sysadmin/org_admin_table.html" %}
|
||||||
<tr>
|
|
||||||
<th width="20%">{% trans "Name" %}</th>
|
|
||||||
<th width="18%">{% trans "Url Prefix" %}</th>
|
|
||||||
<th width="25%">{% trans "Creator" %}</th>
|
|
||||||
<th width="17%">{% trans "Space Used" %}</th>
|
|
||||||
<th width="20%">{% trans "Created At" %}</th>
|
|
||||||
</tr>
|
|
||||||
{% for org in orgs %}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<a href="{% url 'sys_org_info_user' org.org_id %}">{{ org.org_name }}</a>
|
|
||||||
{% if org.trial_info %}
|
|
||||||
<p style="font-size:11px;">(Trial <a href="#" class="unset-trial" data-target="{{ org.org_name }}" data-url="{% url 'remove_trial' org.org_id %}">X</a>)</p>
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td>{{ org.url_prefix }}</td>
|
|
||||||
<td><a href="{% url 'user_info' org.creator %}">{{ org.creator }}</a></td>
|
|
||||||
<td>
|
|
||||||
{{ org.quota_usage|filesizeformat }} {% if org.total_quota > 0 %} / {{ org.total_quota|filesizeformat }} {% endif %}
|
|
||||||
</td>
|
|
||||||
<td>{{ org.ctime|tsstr_sec }}</td>
|
|
||||||
<!-- <td><a href="#" data-url="{{ SITE_ROOT}}org/remove/{{ org.org_id }}/" data-target="{{ org.org_name }}" class="remove-btn op vh">{% trans "Delete" %}</a></td> -->
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
|
|
||||||
{% include "snippets/admin_paginator.html" %}
|
{% include "snippets/admin_paginator.html" %}
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>{% trans "None." %}</p>
|
<p>{% trans "None." %}</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -70,6 +48,12 @@ $('#add-btn').click(function() {
|
|||||||
$('#simplemodal-container').css({'width':'auto'});
|
$('#simplemodal-container').css({'width':'auto'});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
addConfirmTo($('.remove-btn'), {
|
||||||
|
'title':"{% trans "Delete org" %}",
|
||||||
|
'con':"{% trans "Are you sure you want to delete %s ?" %}",
|
||||||
|
'post': true // post request
|
||||||
|
});
|
||||||
|
|
||||||
$('#add-org-form').submit(function() {
|
$('#add-org-form').submit(function() {
|
||||||
var form = $(this),
|
var form = $(this),
|
||||||
form_id = form.attr('id'),
|
form_id = form.attr('id'),
|
||||||
|
33
seahub/templates/sysadmin/sys_org_search.html
Normal file
33
seahub/templates/sysadmin/sys_org_search.html
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{% extends "sysadmin/base.html" %}
|
||||||
|
{% load seahub_tags i18n staticfiles %}
|
||||||
|
{% block cur_org %}tab-cur{% endblock %}
|
||||||
|
|
||||||
|
{% block right_panel %}
|
||||||
|
<h3>{% trans "Search Org"%}</h3>
|
||||||
|
|
||||||
|
<form id="search-repo-form" method="get" action="{% url "sys_org_search" %}">
|
||||||
|
<p class="tip">{% trans "Tip: you can search by keyword in name or creator or both." %}</p>
|
||||||
|
<label>{% trans "Name" %}</label><input type="text" name="name" class="input" value="{{name}}"/><br />
|
||||||
|
<label>{% trans "Creator" %}</label><input type="text" name="creator" class="input" value="{{creator}}"/><br />
|
||||||
|
<input type="submit" value="{% trans "Submit" %}" class="submit" />
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<h3>{% trans "Result"%}</h3>
|
||||||
|
{% if orgs %}
|
||||||
|
{% include "sysadmin/org_admin_table.html" %}
|
||||||
|
{% else %}
|
||||||
|
<p>{% trans "No result" %}</p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block extra_script %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
addConfirmTo($('.remove-btn'), {
|
||||||
|
'title':"{% trans "Delete org" %}",
|
||||||
|
'con':"{% trans "Are you sure you want to delete %s ?" %}",
|
||||||
|
'post': true // post request
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
@@ -220,6 +220,7 @@ urlpatterns = patterns(
|
|||||||
url(r'^sys/groupadmin/$', sys_group_admin, name='sys_group_admin'),
|
url(r'^sys/groupadmin/$', sys_group_admin, name='sys_group_admin'),
|
||||||
url(r'^sys/groupadmin/(?P<group_id>\d+)/$', sys_admin_group_info, name='sys_admin_group_info'),
|
url(r'^sys/groupadmin/(?P<group_id>\d+)/$', sys_admin_group_info, name='sys_admin_group_info'),
|
||||||
url(r'^sys/orgadmin/$', sys_org_admin, name='sys_org_admin'),
|
url(r'^sys/orgadmin/$', sys_org_admin, name='sys_org_admin'),
|
||||||
|
url(r'^sys/orgadmin/search/$', sys_org_search, name='sys_org_search'),
|
||||||
url(r'^sys/orgadmin/(?P<org_id>\d+)/set_quota/$', sys_org_set_quota, name='sys_org_set_quota'),
|
url(r'^sys/orgadmin/(?P<org_id>\d+)/set_quota/$', sys_org_set_quota, name='sys_org_set_quota'),
|
||||||
url(r'^sys/orgadmin/(?P<org_id>\d+)/rename/$', sys_org_rename, name='sys_org_rename'),
|
url(r'^sys/orgadmin/(?P<org_id>\d+)/rename/$', sys_org_rename, name='sys_org_rename'),
|
||||||
url(r'^sys/orgadmin/(?P<org_id>\d+)/set_member_quota/$', sys_org_set_member_quota, name='sys_org_set_member_quota'),
|
url(r'^sys/orgadmin/(?P<org_id>\d+)/set_member_quota/$', sys_org_set_member_quota, name='sys_org_set_member_quota'),
|
||||||
|
@@ -13,6 +13,7 @@ from django.contrib import messages
|
|||||||
from django.http import HttpResponse, Http404, HttpResponseRedirect, HttpResponseNotAllowed
|
from django.http import HttpResponse, Http404, HttpResponseRedirect, HttpResponseNotAllowed
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render_to_response
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
|
from django.utils import timezone
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
from seaserv import ccnet_threaded_rpc, seafserv_threaded_rpc, get_emailusers, \
|
from seaserv import ccnet_threaded_rpc, seafserv_threaded_rpc, get_emailusers, \
|
||||||
@@ -1159,10 +1160,22 @@ def sys_org_admin(request):
|
|||||||
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)
|
||||||
|
|
||||||
|
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
|
org.trial_info = None
|
||||||
for trial_org in trial_orgs:
|
for trial_org in trial_orgs:
|
||||||
if trial_org.user_or_org == str(org.org_id):
|
if trial_org.user_or_org == str(org.org_id):
|
||||||
org.trial_info = {'expire_date': trial_org.expire_date}
|
org.trial_info = {'expire_date': trial_org.expire_date}
|
||||||
|
if trial_org.expire_date:
|
||||||
|
org.expiration = trial_org.expire_date
|
||||||
|
|
||||||
|
if org.expiration:
|
||||||
|
org.is_expired = True if org.expiration < timezone.now() else False
|
||||||
|
else:
|
||||||
|
org.is_expired = False
|
||||||
|
|
||||||
if len(orgs_plus_one) == per_page + 1:
|
if len(orgs_plus_one) == per_page + 1:
|
||||||
page_next = True
|
page_next = True
|
||||||
@@ -1178,6 +1191,39 @@ def sys_org_admin(request):
|
|||||||
'page_next': page_next,
|
'page_next': page_next,
|
||||||
}, context_instance=RequestContext(request))
|
}, 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
|
@login_required
|
||||||
@sys_staff_required
|
@sys_staff_required
|
||||||
def sys_org_rename(request, org_id):
|
def sys_org_rename(request, org_id):
|
||||||
|
Reference in New Issue
Block a user