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 check_repo_owner_quota(self, isnewfile=True, contentlength=-1): """Check if the upload would cause the user quota be exceeded `contentlength` is only positive when the client does not use "transfer-encode: chunking" Return True if the quota would not be exceeded, otherwise return False. """ if contentlength <= 0: # When client use "transfer-encode: chunking", the content length # is not included in the request headers if isnewfile: return check_repo_quota(self.repo.id) >= 0 else: return True if not self.owner: self.owner = seafile_api.get_repo_owner(self.repo.id) quota = seafile_api.get_user_quota(self.owner) if quota == INFINITE_QUOTA: return True self_usage = seafile_api.get_user_self_usage(self.owner) share_usage = seafile_api.get_user_share_usage(self.owner) if CALC_SHARE_USAGE else 0 remain = quota - self_usage - share_usage if not isnewfile: remain -= self.obj.size return contentlength <= remain
def user_search(request): """Search a user. """ email = request.GET.get('email', '') email_patt = email.replace('*', '%') users = ccnet_threaded_rpc.search_emailusers(email_patt, -1, -1) last_logins = UserLastLogin.objects.filter( username__in=[x.email for x in users]) for user in users: 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 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, }, context_instance=RequestContext(request))
def user_search(request): """Search a user. """ email = request.GET.get('email', '') email_patt = email.replace('*', '%') users = ccnet_threaded_rpc.search_emailusers(email_patt, -1, -1) last_logins = UserLastLogin.objects.filter(username__in=[x.email for x in users]) for user in users: 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 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, }, context_instance=RequestContext(request))
def check_user_share_quota(username, repo, users=[], groups=[]): """Check whether user has enough quota when share repo to users/groups. """ if not users and not groups: return True if not seaserv.CALC_SHARE_USAGE: return True check_pass = False quota = seafile_api.get_user_quota(username) self_usage = seafile_api.get_user_self_usage(username) current_share_usage = seafile_api.get_user_share_usage(username) share_usage = 0 if users: share_usage += seafile_api.get_repo_size(repo.id) * (len(users)) if groups: grp_members = [] for group in groups: 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: check_pass = True return check_pass
def check_user_share_quota(username, repo, users=[], groups=[]): """Check whether user has enough quota when share repo to users/groups. """ if not users and not groups: return True if not seaserv.CALC_SHARE_USAGE: return True check_pass = False quota = seafile_api.get_user_quota(username) self_usage = seafile_api.get_user_self_usage(username) current_share_usage = seafile_api.get_user_share_usage(username) share_usage = 0 if users: share_usage += seafile_api.get_repo_size(repo.id) * (len(users)) if groups: grp_members = [] for group in groups: 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: check_pass = True return check_pass
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_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 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 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], }, context_instance=RequestContext(request))
def get_quota_usage(username): # https://github.com/haiwen/seahub/blob/master/seahub/api2/views.py#L310 used = seafile_api.get_user_self_usage(username) + seafile_api.get_user_share_usage(username) total = seafile_api.get_user_quota(username) if used > 0: used = float(used) if total == -2: total = float(2) elif total > 0: total = float(total) return used, total
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 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 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], }, context_instance=RequestContext(request))
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 sys_user_admin_admins(request): """List all admins from database. """ users = get_emailusers('DB', -1, -1) admin_users = [] not_admin_users = [] for user in users: if user.is_staff is True: admin_users.append(user) else: not_admin_users.append(user) last_logins = UserLastLogin.objects.filter( username__in=[x.email for x in admin_users]) 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 # 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 return render_to_response('sysadmin/sys_useradmin_admins.html', { 'admin_users': admin_users, 'not_admin_users': not_admin_users, 'CALC_SHARE_USAGE': CALC_SHARE_USAGE, 'have_ldap': have_ldap, 'default_user': DEFAULT_USER, 'guest_user': GUEST_USER, }, context_instance=RequestContext(request))
def sys_user_admin_admins(request): """List all admins from database. """ users = get_emailusers('DB', -1, -1) admin_users = [] not_admin_users = [] for user in users: if user.is_staff is True: admin_users.append(user) else: not_admin_users.append(user) last_logins = UserLastLogin.objects.filter(username__in=[x.email for x in admin_users]) 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 # 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 return render_to_response( 'sysadmin/sys_useradmin_admins.html', { 'admin_users': admin_users, 'not_admin_users': not_admin_users, 'CALC_SHARE_USAGE': CALC_SHARE_USAGE, 'have_ldap': have_ldap, 'default_user': DEFAULT_USER, 'guest_user': GUEST_USER, }, context_instance=RequestContext(request))
def user_info(request, email): owned_repos = seafile_api.get_owned_repo_list(email) quota = seafile_api.get_user_quota(email) quota_usage = 0 share_usage = 0 my_usage = 0 my_usage = seafile_api.get_user_self_usage(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 get_quota_usage(username): # https://github.com/haiwen/seahub/blob/master/seahub/api2/views.py#L310 used = seafile_api.get_user_self_usage(username) + seafile_api.get_user_share_usage(username) total = seafile_api.get_user_quota(username) if used > 0: used = float(used) else: used = 0 if total > 0: total = float(total) else: total = float(2) return used, total # print get_quota_usage('*****@*****.**') # print get_quota_usage('*****@*****.**')
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 get_quota_usage(username): # https://github.com/haiwen/seahub/blob/master/seahub/api2/views.py#L310 used = seafile_api.get_user_self_usage( username) + seafile_api.get_user_share_usage(username) total = seafile_api.get_user_quota(username) if used > 0: used = float(used) else: used = 0 if total > 0: total = float(total) else: total = float(2) return used, total # print get_quota_usage('*****@*****.**') # print get_quota_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): if request.method == 'POST': result = {} content_type = 'application/json; charset=utf-8' f = SetUserQuotaForm(request.POST) if f.is_valid(): email = f.cleaned_data['email'] quota_mb = f.cleaned_data['quota'] quota = quota_mb * (1 << 20) try: seafile_api.set_user_quota(email, quota) except: result['error'] = _(u'Failed to set quota: internal error') return HttpResponse(json.dumps(result), 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), content_type=content_type) owned_repos = [] owned_repos = seafile_api.get_owned_repo_list(email) quota = seafile_api.get_user_quota(email) quota_usage = 0 share_usage = 0 my_usage = 0 my_usage = seafile_api.get_user_self_usage(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_search(request): """Search a user. """ email = request.GET.get('email', '') email_patt = email.replace('*', '%') users = ccnet_threaded_rpc.search_emailusers(email_patt, -1, -1) last_logins = UserLastLogin.objects.filter( username__in=[x.email for x in users]) for user in users: 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 # 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 sys_user_admin(request): # 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(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] 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 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, }, context_instance=RequestContext(request))
def sys_user_admin(request): # 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(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] 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 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, }, context_instance=RequestContext(request))
def org_user_search(request): """Search an organization user. """ search_patt = request.GET.get('email', '') org = request.user.org org_users = ccnet_api.get_org_users_by_url_prefix(org.url_prefix, -1, -1) results = [] if search_patt: for u in org_users: user = User.objects.get(u.email) if search_patt in user.username or search_patt in user.contact_email: results.append(user) last_logins = UserLastLogin.objects.filter( username__in=[x.email for x in results]) for user in results: 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 = get_org_user_quota(org.org_id, user.email) except SearpcError as e: logger.error(e) user.self_usage = -1 user.share_usage = -1 user.quota = -1 user.is_org_staff = is_org_staff(org.org_id, user.email) # 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(request, 'organizations/user_search.html', { 'users': results, 'email': search_patt, })
def user_search(request): """Search a user. """ email = request.GET.get('email', '') email_patt = email.replace('*', '%') users = ccnet_threaded_rpc.search_emailusers(email_patt, -1, -1) last_logins = UserLastLogin.objects.filter(username__in=[x.email for x in users]) for user in users: 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 # 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_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))