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.space_quota = seafile_api.get_user_quota(user.email) if CALC_SHARE_USAGE: user.share_quota = seafile_api.get_user_share_quota(user.email) user.share_usage = seafile_api.get_user_share_usage(user.email) else: user.share_usage = user.share_quota = 0 except SearpcError as e: logger.error(e) user.space_usage = user.space_quota = user.share_usage = user.share_quota = -1
def sys_repo_transfer(request): """Transfer a repo to others. """ if request.method != 'POST': raise Http404 repo_id = request.POST.get('repo_id', None) new_owner = request.POST.get('email', None) if repo_id and new_owner: if seafserv_threaded_rpc.get_org_id_by_repo_id(repo_id) > 0: messages.error(request, _(u'Can not transfer organization library')) else: try: User.objects.get(email=new_owner) if ccnet_threaded_rpc.get_orgs_by_user(new_owner): messages.error( request, _(u'Can not transfer library to organization user %s') % new_owner) else: seafile_api.set_repo_owner(repo_id, new_owner) messages.success(request, _(u'Successfully transfered.')) except User.DoesNotExist: messages.error( request, _(u'Failed to transfer, user %s not found') % new_owner) else: messages.error(request, _(u'Failed to transfer, invalid arguments.')) next = request.META.get('HTTP_REFERER', None) if not next: next = reverse(sys_repo_admin) return HttpResponseRedirect(next)
def user_remove(request, user_id): """Remove user""" referer = request.META.get('HTTP_REFERER', None) next = reverse('sys_useradmin') if referer is None else referer try: user = User.objects.get(id=int(user_id)) org = ccnet_threaded_rpc.get_orgs_by_user(user.email) if org: if org[0].creator == user.email: messages.error( request, _(u'Failed to delete: the user is an organization creator') ) return HttpResponseRedirect(next) org_id = org[0].org_id org_repos = seafile_api.get_org_owned_repo_list(org_id, user.email) for repo in org_repos: seafile_api.remove_repo(repo.id) user.delete() messages.success(request, _(u'Successfully deleted %s') % user.username) except User.DoesNotExist: messages.error(request, _(u'Failed to delete: the user does not exist')) return HttpResponseRedirect(next)
def user_set_quota(request, email): if request.method != 'POST': raise Http404 content_type = 'application/json; charset=utf-8' result = {} f = SetUserQuotaForm(request.POST) if f.is_valid(): email = f.cleaned_data['email'] quota_mb = f.cleaned_data['quota'] quota = quota_mb * (1 << 20) org = ccnet_threaded_rpc.get_orgs_by_user(email) try: if not org: seafile_api.set_user_quota(email, quota) else: org_id = org[0].org_id seafserv_threaded_rpc.set_org_user_quota(org_id, email, quota) except: result['error'] = _(u'Failed to set quota: internal server error') return HttpResponse(json.dumps(result), status=500, content_type=content_type) result['success'] = True return HttpResponse(json.dumps(result), content_type=content_type) else: result['error'] = str(f.errors.values()[0]) return HttpResponse(json.dumps(result), status=400, content_type=content_type)
def sys_repo_transfer(request): """Transfer a repo to others. """ if request.method != 'POST': raise Http404 repo_id = request.POST.get('repo_id', None) new_owner = request.POST.get('email', None) if repo_id and new_owner: if seafserv_threaded_rpc.get_org_id_by_repo_id(repo_id) > 0: messages.error(request, _(u'Can not transfer organization library')) else: try: User.objects.get(email=new_owner) if ccnet_threaded_rpc.get_orgs_by_user(new_owner): messages.error(request, _(u'Can not transfer library to organization user %s') % new_owner) else: seafile_api.set_repo_owner(repo_id, new_owner) messages.success(request, _(u'Successfully transfered.')) except User.DoesNotExist: messages.error(request, _(u'Failed to transfer, user %s not found') % new_owner) else: messages.error(request, _(u'Failed to transfer, invalid arguments.')) next = request.META.get('HTTP_REFERER', None) if not next: next = reverse(sys_repo_admin) return HttpResponseRedirect(next)
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.space_quota = seafile_api.get_user_quota(user.email) if CALC_SHARE_USAGE: user.share_quota = seafile_api.get_user_share_quota(user.email) user.share_usage = seafile_api.get_user_share_usage(user.email) else: user.share_usage = user.share_quota = 0 except SearpcError as e: logger.error(e) user.space_usage = user.space_quota = user.share_usage = user.share_quota = -1
def delete(self): """ When delete user, we should also delete group relationships. """ if self.source == "DB": source = "DB" else: source = "LDAP" owned_repos = [] orgs = ccnet_threaded_rpc.get_orgs_by_user(self.username) if orgs: for org in orgs: owned_repos += seafile_api.get_org_owned_repo_list( org.org_id, self.username) else: owned_repos += seafile_api.get_owned_repo_list(self.username) for r in owned_repos: seafile_api.remove_repo(r.id) clear_token(self.username) # remove current user from joined groups ccnet_api.remove_group_user(self.username) ccnet_api.remove_emailuser(source, self.username) Profile.objects.delete_profile_by_user(self.username)
def user_set_quota(request, email): if request.method != 'POST': raise Http404 content_type = 'application/json; charset=utf-8' result = {} f = SetUserQuotaForm(request.POST) if f.is_valid(): email = f.cleaned_data['email'] quota_mb = f.cleaned_data['quota'] quota = quota_mb * (1 << 20) org = ccnet_threaded_rpc.get_orgs_by_user(email) try: if not org: seafile_api.set_user_quota(email, quota) else: org_id = org[0].org_id org_quota_mb = seafserv_threaded_rpc.get_org_quota(org_id) / (1 << 20) if quota_mb > org_quota_mb: result['error'] = _(u'Failed to set quota: maximum quota is %d MB' % \ org_quota_mb) return HttpResponse(json.dumps(result), status=400, content_type=content_type) else: seafserv_threaded_rpc.set_org_user_quota(org_id, email, quota) except: result['error'] = _(u'Failed to set quota: internal server error') return HttpResponse(json.dumps(result), status=500, content_type=content_type) result['success'] = True return HttpResponse(json.dumps(result), content_type=content_type) else: result['error'] = str(f.errors.values()[0]) return HttpResponse(json.dumps(result), status=400, content_type=content_type)
def delete(self): """ When delete user, we should also delete group relationships. """ if self.source == "DB": source = "DB" else: source = "LDAP" owned_repos = [] orgs = ccnet_threaded_rpc.get_orgs_by_user(self.username) if orgs: for org in orgs: owned_repos += seafile_api.get_org_owned_repo_list(org.org_id, self.username) else: owned_repos += seafile_api.get_owned_repo_list(self.username) for r in owned_repos: seafile_api.remove_repo(r.id) clear_token(self.username) # remove current user from joined groups ccnet_api.remove_group_user(self.username) ccnet_api.remove_emailuser(source, self.username) Profile.objects.delete_profile_by_user(self.username)
def user_search(request): """Search a user. """ email = request.GET.get('email', '') 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 # check user's role if user.role == GUEST_USER: 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 return render_to_response('sysadmin/user_search.html', { 'users': users, 'email': email, 'default_user': DEFAULT_USER, 'guest_user': GUEST_USER, 'enable_guest': ENABLE_GUEST, }, context_instance=RequestContext(request))
def delete(self): """ When delete user, we should also delete group relationships. """ if self.source == "DB": source = "DB" else: source = "LDAP" username = self.username orgs = ccnet_threaded_rpc.get_orgs_by_user(username) # remove owned repos owned_repos = [] if orgs: for org in orgs: owned_repos += seafile_api.get_org_owned_repo_list( org.org_id, username) else: owned_repos += seafile_api.get_owned_repo_list(username) for r in owned_repos: seafile_api.remove_repo(r.id) # remove shared in repos shared_in_repos = [] if orgs: for org in orgs: org_id = org.org_id shared_in_repos = seafile_api.get_org_share_in_repo_list( org_id, username, -1, -1) for r in shared_in_repos: seafile_api.org_remove_share(org_id, r.repo_id, r.user, username) else: shared_in_repos = seafile_api.get_share_in_repo_list( username, -1, -1) for r in shared_in_repos: seafile_api.remove_share(r.repo_id, r.user, username) clear_token(username) # remove current user from joined groups ccnet_api.remove_group_user(username) ccnet_api.remove_emailuser(source, username) Profile.objects.delete_profile_by_user(username)
def user_search(request): """Search a user. """ email = request.GET.get('email', '') 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 # check user's role if user.role == GUEST_USER: 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 return render_to_response('sysadmin/user_search.html', { 'users': users, 'email': email, 'default_user': DEFAULT_USER, 'guest_user': GUEST_USER, 'enable_guest': ENABLE_GUEST, }, context_instance=RequestContext(request))
def user_remove(request, user_id): """Remove user, also remove group relationship.""" try: user = User.objects.get(id=int(user_id)) org = ccnet_threaded_rpc.get_orgs_by_user(user.email) if org: org_id = org[0].org_id org_repos = seafile_api.get_org_owned_repo_list(org_id, user.email) for repo in org_repos: seafile_api.remove_repo(repo.id) user.delete() messages.success(request, _(u'Successfully deleted %s') % user.username) except User.DoesNotExist: messages.error(request, _(u'Failed to delete: the user does not exist')) referer = request.META.get('HTTP_REFERER', None) next = reverse('sys_useradmin') if referer is None else referer return HttpResponseRedirect(next)
def user_info(request, email): owned_repos = seafile_api.get_owned_repo_list(email) org = ccnet_threaded_rpc.get_orgs_by_user(email) if not org: my_usage = seafile_api.get_user_self_usage(email) quota = seafile_api.get_user_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) 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
def user_info(request, email): owned_repos = seafile_api.get_owned_repo_list(email) org = ccnet_threaded_rpc.get_orgs_by_user(email) if not org: my_usage = seafile_api.get_user_self_usage(email) quota = seafile_api.get_user_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) 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
def user_info(request, email): owned_repos = seafile_api.get_owned_repo_list(email) org = ccnet_threaded_rpc.get_orgs_by_user(email) org_name = None if not org: space_usage = seafile_api.get_user_self_usage(email) space_quota = seafile_api.get_user_quota(email) if CALC_SHARE_USAGE: share_usage = seafile_api.get_user_share_usage(email) share_quota = seafile_api.get_user_share_quota(email) else: share_quota = share_usage = 0 else: org_id = org[0].org_id org_name = org[0].org_name 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) # get user profile profile = Profile.objects.get_profile_by_user(email) d_profile = DetailedProfile.objects.get_detailed_profile_by_user(email) user_shared_links = [] # download links p_fileshares = [] fileshares = list(FileShare.objects.filter(username=email)) for fs in fileshares: r = seafile_api.get_repo(fs.repo_id) if not r: fs.delete() continue if fs.is_file_share_link(): if seafile_api.get_file_id_by_path(r.id, fs.path) is None: fs.delete() continue fs.filename = os.path.basename(fs.path) path = fs.path.rstrip('/') # Normalize file path obj_id = seafile_api.get_file_id_by_path(r.id, path) fs.file_size = seafile_api.get_file_size(r.store_id, r.version, obj_id) else: if seafile_api.get_dir_id_by_path(r.id, fs.path) is None: fs.delete() continue fs.filename = os.path.basename(fs.path.rstrip('/')) path = fs.path if path[-1] != '/': # Normalize dir path path += '/' # get dir size dir_id = seafserv_threaded_rpc.get_dirid_by_path( r.id, r.head_cmmt_id, path) fs.dir_size = seafserv_threaded_rpc.get_dir_size( r.store_id, r.version, dir_id) fs.is_download = True p_fileshares.append(fs) p_fileshares.sort(key=lambda x: x.view_cnt, reverse=True) user_shared_links += p_fileshares # upload links uploadlinks = list(UploadLinkShare.objects.filter(username=email)) p_uploadlinks = [] for link in uploadlinks: r = seafile_api.get_repo(link.repo_id) if not r: link.delete() continue if seafile_api.get_dir_id_by_path(r.id, link.path) is None: link.delete() continue link.dir_name = os.path.basename(link.path.rstrip('/')) link.is_upload = True p_uploadlinks.append(link) p_uploadlinks.sort(key=lambda x: x.view_cnt, reverse=True) user_shared_links += p_uploadlinks return render_to_response('sysadmin/userinfo.html', { 'owned_repos': owned_repos, 'space_quota': space_quota, 'space_usage': space_usage, 'share_quota': share_quota, 'share_usage': share_usage, 'CALC_SHARE_USAGE': CALC_SHARE_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))
def user_info(request, email): owned_repos = seafile_api.get_owned_repo_list(email) org = ccnet_threaded_rpc.get_orgs_by_user(email) org_name = None if not org: space_usage = seafile_api.get_user_self_usage(email) space_quota = seafile_api.get_user_quota(email) if CALC_SHARE_USAGE: share_usage = seafile_api.get_user_share_usage(email) share_quota = seafile_api.get_user_share_quota(email) else: share_quota = share_usage = 0 else: org_id = org[0].org_id org_name = org[0].org_name 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) # get user profile profile = Profile.objects.get_profile_by_user(email) d_profile = DetailedProfile.objects.get_detailed_profile_by_user(email) user_shared_links = [] # download links p_fileshares = [] fileshares = list(FileShare.objects.filter(username=email)) for fs in fileshares: r = seafile_api.get_repo(fs.repo_id) if not r: fs.delete() continue if fs.is_file_share_link(): if seafile_api.get_file_id_by_path(r.id, fs.path) is None: fs.delete() continue fs.filename = os.path.basename(fs.path) path = fs.path.rstrip('/') # Normalize file path obj_id = seafile_api.get_file_id_by_path(r.id, path) fs.file_size = seafile_api.get_file_size(r.store_id, r.version, obj_id) else: if seafile_api.get_dir_id_by_path(r.id, fs.path) is None: fs.delete() continue fs.filename = os.path.basename(fs.path.rstrip('/')) path = fs.path if path[-1] != '/': # Normalize dir path path += '/' # get dir size dir_id = seafserv_threaded_rpc.get_dirid_by_path(r.id, r.head_cmmt_id, path) fs.dir_size = seafserv_threaded_rpc.get_dir_size(r.store_id, r.version, dir_id) fs.is_download = True p_fileshares.append(fs) p_fileshares.sort(key=lambda x: x.view_cnt, reverse=True) user_shared_links += p_fileshares # upload links uploadlinks = list(UploadLinkShare.objects.filter(username=email)) p_uploadlinks = [] for link in uploadlinks: r = seafile_api.get_repo(link.repo_id) if not r: link.delete() continue if seafile_api.get_dir_id_by_path(r.id, link.path) is None: link.delete() continue link.dir_name = os.path.basename(link.path.rstrip('/')) link.is_upload = True p_uploadlinks.append(link) p_uploadlinks.sort(key=lambda x: x.view_cnt, reverse=True) user_shared_links += p_uploadlinks return render_to_response( 'sysadmin/userinfo.html', { 'owned_repos': owned_repos, 'space_quota': space_quota, 'space_usage': space_usage, 'share_quota': share_quota, 'share_usage': share_usage, 'CALC_SHARE_USAGE': CALC_SHARE_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))
def sys_user_admin(request): """List all users from database. """ # Make sure page request is an int. If not, deliver first page. try: current_page = int(request.GET.get('page', '1')) per_page = int(request.GET.get('per_page', '25')) except ValueError: current_page = 1 per_page = 25 users_plus_one = get_emailusers('DB', per_page * (current_page - 1), per_page + 1) if len(users_plus_one) == per_page + 1: page_next = True else: page_next = False users = users_plus_one[:per_page] last_logins = UserLastLogin.objects.filter(username__in=[x.email for x in users]) for user in users: 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 # check user's role if user.role == GUEST_USER: 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 have_ldap = True if len(get_emailusers('LDAP', 0, 1)) > 0 else False platform = get_platform_name() server_id = get_server_id() return render_to_response( 'sysadmin/sys_useradmin.html', { 'users': users, 'current_page': current_page, 'prev_page': current_page-1, 'next_page': current_page+1, 'per_page': per_page, 'page_next': page_next, 'CALC_SHARE_USAGE': CALC_SHARE_USAGE, 'have_ldap': have_ldap, 'platform': platform, 'server_id': server_id[:8], 'default_user': DEFAULT_USER, 'guest_user': GUEST_USER, 'enable_guest': ENABLE_GUEST, }, context_instance=RequestContext(request))
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: space_quota = seafile_api.get_user_quota(username) space_usage = seafile_api.get_user_self_usage(username) else: org_id = org[0].org_id 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) rates = {} if space_quota > 0: rates['space_usage'] = str(float(space_usage) / space_quota * 100) + '%' else: # no space quota set in config rates['space_usage'] = '0%' # traffic calculation traffic_stat = 0 if TRAFFIC_STATS_ENABLED: # User's network traffic stat in this month try: stat = get_user_traffic_stat(username) except Exception as e: logger.error(e) stat = None 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: if is_org_context(request): if request.user.org and bool(request.user.org.is_staff) is True: # payment for org admin payment_url = reverse('org_plan') else: # no payment for org members ENABLE_PAYMENT = False else: # payment for personal account payment_url = reverse('plan') ctx = { "org": org, "space_quota": space_quota, "space_usage": space_usage, "rates": rates, "SHOW_TRAFFIC": SHOW_TRAFFIC, "TRAFFIC_STATS_ENABLED": TRAFFIC_STATS_ENABLED, "traffic_stat": traffic_stat, "ENABLE_PAYMENT": ENABLE_PAYMENT, "payment_url": payment_url, } html = render_to_string('snippets/space_and_traffic.html', ctx, context_instance=RequestContext(request)) return HttpResponse(json.dumps({"html": html}), content_type=content_type)
def sys_user_admin(request): """List all users from database. """ # Make sure page request is an int. If not, deliver first page. try: current_page = int(request.GET.get('page', '1')) per_page = int(request.GET.get('per_page', '25')) except ValueError: current_page = 1 per_page = 25 users_plus_one = get_emailusers('DB', per_page * (current_page - 1), per_page + 1) if len(users_plus_one) == per_page + 1: page_next = True else: page_next = False users = users_plus_one[:per_page] last_logins = UserLastLogin.objects.filter( username__in=[x.email for x in users]) for user in users: 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 # check user's role if user.role == GUEST_USER: 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 have_ldap = True if len(get_emailusers('LDAP', 0, 1)) > 0 else False platform = get_platform_name() server_id = get_server_id() return render_to_response('sysadmin/sys_useradmin.html', { 'users': users, 'current_page': current_page, 'prev_page': current_page - 1, 'next_page': current_page + 1, 'per_page': per_page, 'page_next': page_next, 'CALC_SHARE_USAGE': CALC_SHARE_USAGE, 'have_ldap': have_ldap, 'platform': platform, 'server_id': server_id[:8], 'default_user': DEFAULT_USER, 'guest_user': GUEST_USER, 'enable_guest': ENABLE_GUEST, }, context_instance=RequestContext(request))