diff --git a/seahub/templates/snippets/space_and_traffic.html b/seahub/templates/snippets/space_and_traffic.html
index f486e910ac..297473728d 100644
--- a/seahub/templates/snippets/space_and_traffic.html
+++ b/seahub/templates/snippets/space_and_traffic.html
@@ -19,6 +19,10 @@
{% endif %}
{% endif %}
+
+ {% if user.trialing %}
+
Trial expires at {{user.trial_expire_date|date:"Y-m-d"}}
+ {% endif %}
{% if TRAFFIC_STATS_ENABLED %}
diff --git a/seahub/templates/sysadmin/useradmin_js.html b/seahub/templates/sysadmin/useradmin_js.html
index 456e3a3db7..e7f86d0a7f 100644
--- a/seahub/templates/sysadmin/useradmin_js.html
+++ b/seahub/templates/sysadmin/useradmin_js.html
@@ -15,6 +15,10 @@ addConfirmTo($('.set-admin-btn'), {
'title':"{% trans "Set Admin" %}",
'con':"{% trans "Are you sure you want to set %s as admin?" %}"
});
+addConfirmTo($('.unset-trial'), {
+ 'title':"{% trans "Remove Trial" %}",
+ 'con':"{% trans "Are you sure you want to remove trial for %s ?" %}"
+});
$('#add-user-btn').click(function() {
$('#add-user-form').modal();
diff --git a/seahub/templates/sysadmin/useradmin_table.html b/seahub/templates/sysadmin/useradmin_table.html
index 99656623e8..0610c354e0 100644
--- a/seahub/templates/sysadmin/useradmin_table.html
+++ b/seahub/templates/sysadmin/useradmin_table.html
@@ -15,6 +15,9 @@
{% if user.org %}
({{user.org.org_name}})
{% endif %}
+ {% if user.trial_info %}
+ (Trial X)
+ {% endif %}
{% if user.source != 'LDAP' %}
diff --git a/seahub/urls.py b/seahub/urls.py
index f5b1f1137e..2ec4a4e457 100644
--- a/seahub/urls.py
+++ b/seahub/urls.py
@@ -199,6 +199,7 @@ urlpatterns = patterns('',
url(r'^sys/notificationadmin/', notification_list, name='notification_list'),
url(r'^useradmin/add/$', user_add, name="user_add"),
url(r'^useradmin/remove/(?P[^/]+)/$', user_remove, name="user_remove"),
+ url(r'^useradmin/removetrial/(?P[^/]+)/$', user_remove_trial, name="user_remove_trial"),
url(r'^useradmin/search/$', user_search, name="user_search"),
url(r'^useradmin/makeadmin/(?P[^/]+)/$', user_make_admin, name='user_make_admin'),
url(r'^useradmin/removeadmin/(?P[^/]+)/$', user_remove_admin, name='user_remove_admin'),
diff --git a/seahub/views/sysadmin.py b/seahub/views/sysadmin.py
index e38cfe6d95..3531390e98 100644
--- a/seahub/views/sysadmin.py
+++ b/seahub/views/sysadmin.py
@@ -30,13 +30,17 @@ from seahub.views import get_system_default_repo_id
from seahub.forms import SetUserQuotaForm, AddUserForm, BatchAddUserForm
from seahub.profile.models import Profile, DetailedProfile
from seahub.share.models import FileShare, UploadLinkShare
-
import seahub.settings as settings
from seahub.settings import INIT_PASSWD, SITE_NAME, \
SEND_EMAIL_ON_ADDING_SYSTEM_MEMBER, SEND_EMAIL_ON_RESETTING_USER_PASSWD, \
ENABLE_GUEST
from seahub.utils import send_html_email, get_user_traffic_list, get_server_id
from seahub.utils.sysinfo import get_platform_name
+try:
+ from seahub_extra.trialuser.models import TrialUser
+ enable_trial_user = True
+except:
+ enable_trial_user = False
logger = logging.getLogger(__name__)
@@ -198,6 +202,10 @@ def sys_user_admin(request):
users = users_plus_one[:per_page]
last_logins = UserLastLogin.objects.filter(username__in=[x.email for x in users])
+ if enable_trial_user:
+ trial_users = TrialUser.objects.filter(username__in=[x.email for x in users])
+ else:
+ trial_users = []
for user in users:
if user.props.id == request.user.id:
user.is_self = True
@@ -209,12 +217,18 @@ def sys_user_admin(request):
user.is_guest = True
else:
user.is_guest = False
+
# populate user last login time
user.last_login = None
for last_login in last_logins:
if last_login.username == user.email:
user.last_login = last_login.last_login
+ user.trial_info = None
+ for trial_user in trial_users:
+ if trial_user.username == user.email:
+ user.trial_info = {'expire_date': trial_user.expire_date}
+
have_ldap = True if len(get_emailusers('LDAP', 0, 1)) > 0 else False
platform = get_platform_name()
@@ -529,6 +543,22 @@ def user_remove(request, user_id):
return HttpResponseRedirect(next)
+@login_required
+@sys_staff_required
+def user_remove_trial(request, username):
+ """
+
+ Arguments:
+ - `request`:
+ """
+ referer = request.META.get('HTTP_REFERER', None)
+ next = reverse('sys_useradmin') if referer is None else referer
+
+ TrialUser.objects.filter(username=username).delete()
+
+ messages.success(request, _('Successfully remove trial for user: %s') % username)
+ return HttpResponseRedirect(next)
+
@login_required
@sys_staff_required
def user_make_admin(request, user_id):
@@ -1060,6 +1090,10 @@ 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])
+ if enable_trial_user:
+ trial_users = TrialUser.objects.filter(username__in=[x.email for x in users])
+ else:
+ trial_users = []
for user in users:
_populate_user_quota_usage(user)
@@ -1075,6 +1109,11 @@ def user_search(request):
if last_login.username == user.email:
user.last_login = last_login.last_login
+ user.trial_info = None
+ for trial_user in trial_users:
+ if trial_user.username == user.email:
+ user.trial_info = {'expire_date': trial_user.expire_date}
+
return render_to_response('sysadmin/user_search.html', {
'users': users,
'email': email,
|