mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-10 19:29:56 +00:00
Allow share repo to unjoined group
This commit is contained in:
@@ -32,7 +32,7 @@ from pysearpc import SearpcError
|
||||
from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_repos, \
|
||||
get_repo, get_commits, get_branches, \
|
||||
seafserv_threaded_rpc, seafserv_rpc, get_binding_peerids, \
|
||||
check_group_staff, check_permission, get_personal_groups, get_group_repos
|
||||
check_group_staff, check_permission, get_personal_groups_by_user, get_group_repos
|
||||
|
||||
from seahub.utils import list_to_string, \
|
||||
get_httpserver_root, gen_token, \
|
||||
@@ -290,7 +290,7 @@ class ReposView(ResponseMixin, View):
|
||||
}
|
||||
repos_json.append(repo)
|
||||
|
||||
groups = get_personal_groups(email)
|
||||
groups = get_personal_groups_by_user(email)
|
||||
for group in groups:
|
||||
g_repos = get_group_repos(group.id, email)
|
||||
calculate_repo_info (g_repos, email)
|
||||
|
Binary file not shown.
@@ -20,11 +20,11 @@ msgstr ""
|
||||
|
||||
#: error_msg.py:7
|
||||
msgid "The group has already created"
|
||||
msgstr "该小组已经存在。"
|
||||
msgstr "名称重复,请重新输入。"
|
||||
|
||||
#: error_msg.py:8
|
||||
msgid "Failed to create group"
|
||||
msgstr "创建小组失败。"
|
||||
msgstr "创建失败。"
|
||||
|
||||
#: error_msg.py:11
|
||||
msgid "The group has already created in this org."
|
||||
|
125
group/views.py
125
group/views.py
@@ -18,8 +18,9 @@ from django.views.generic.edit import BaseFormView, FormMixin
|
||||
from auth.decorators import login_required
|
||||
from seaserv import ccnet_rpc, ccnet_threaded_rpc, seafserv_threaded_rpc, \
|
||||
get_repo, get_group_repos, check_group_staff, get_commits, is_group_user, \
|
||||
get_personal_groups, get_group, get_group_members, create_org_repo, \
|
||||
get_org_group_repos, get_org_groups_by_user
|
||||
get_personal_groups_by_user, get_group, get_group_members, \
|
||||
get_personal_groups, create_org_repo, get_org_group_repos, \
|
||||
get_org_groups_by_user
|
||||
from pysearpc import SearpcError
|
||||
|
||||
from models import GroupMessage, MessageReply, MessageAttachment, BusinessGroup
|
||||
@@ -98,68 +99,68 @@ class GroupListView(LoginRequiredMixin, GroupMixin, TemplateResponseMixin,
|
||||
return FormMixin.form_invalid(self, form)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
kwargs['groups'] = get_personal_groups(self.get_username())
|
||||
kwargs['groups'] = get_personal_groups(-1, -1)
|
||||
return kwargs
|
||||
|
||||
class DeptGroupListView(GroupListView):
|
||||
template_name = 'group/dept_groups.html'
|
||||
# class DeptGroupListView(GroupListView):
|
||||
# template_name = 'group/dept_groups.html'
|
||||
|
||||
def form_valid(self, form):
|
||||
group_name = form.cleaned_data['group_name']
|
||||
username = self.get_username()
|
||||
try:
|
||||
group_id = ccnet_threaded_rpc.create_group(
|
||||
group_name.encode('utf-8'), username)
|
||||
bg = BusinessGroup()
|
||||
bg.group_id = group_id
|
||||
bg.group_type = 'dept'
|
||||
bg.save()
|
||||
except SearpcError, e:
|
||||
result = {}
|
||||
result['error'] = _(e.msg)
|
||||
return HttpResponse(json.dumps(result),
|
||||
content_type='application/json; charset=utf-8')
|
||||
# def form_valid(self, form):
|
||||
# group_name = form.cleaned_data['group_name']
|
||||
# username = self.get_username()
|
||||
# try:
|
||||
# group_id = ccnet_threaded_rpc.create_group(
|
||||
# group_name.encode('utf-8'), username)
|
||||
# bg = BusinessGroup()
|
||||
# bg.group_id = group_id
|
||||
# bg.group_type = 'dept'
|
||||
# bg.save()
|
||||
# except SearpcError, e:
|
||||
# result = {}
|
||||
# result['error'] = _(e.msg)
|
||||
# return HttpResponse(json.dumps(result),
|
||||
# content_type='application/json; charset=utf-8')
|
||||
|
||||
if self.request.is_ajax():
|
||||
return self.ajax_form_valid()
|
||||
else:
|
||||
return FormMixin.form_valid(self, form)
|
||||
# if self.request.is_ajax():
|
||||
# return self.ajax_form_valid()
|
||||
# else:
|
||||
# return FormMixin.form_valid(self, form)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
groups = [ g for g in get_personal_groups(self.get_username()) \
|
||||
if self.is_dept_group(g.id)]
|
||||
kwargs['groups'] = groups
|
||||
return kwargs
|
||||
# def get_context_data(self, **kwargs):
|
||||
# groups = [ g for g in get_personal_groups_by_user(self.get_username()) \
|
||||
# if self.is_dept_group(g.id)]
|
||||
# kwargs['groups'] = groups
|
||||
# return kwargs
|
||||
|
||||
class ProjGroupListView(GroupListView):
|
||||
template_name = 'group/proj_groups.html'
|
||||
# class ProjGroupListView(GroupListView):
|
||||
# template_name = 'group/proj_groups.html'
|
||||
|
||||
def form_valid(self, form):
|
||||
group_name = form.cleaned_data['group_name']
|
||||
username = self.get_username()
|
||||
try:
|
||||
group_id = ccnet_threaded_rpc.create_group(
|
||||
group_name.encode('utf-8'), username)
|
||||
bg = BusinessGroup()
|
||||
bg.group_id = group_id
|
||||
bg.group_type = 'proj'
|
||||
bg.save()
|
||||
except SearpcError, e:
|
||||
result = {}
|
||||
result['error'] = _(e.msg)
|
||||
return HttpResponse(json.dumps(result),
|
||||
content_type='application/json; charset=utf-8')
|
||||
# def form_valid(self, form):
|
||||
# group_name = form.cleaned_data['group_name']
|
||||
# username = self.get_username()
|
||||
# try:
|
||||
# group_id = ccnet_threaded_rpc.create_group(
|
||||
# group_name.encode('utf-8'), username)
|
||||
# bg = BusinessGroup()
|
||||
# bg.group_id = group_id
|
||||
# bg.group_type = 'proj'
|
||||
# bg.save()
|
||||
# except SearpcError, e:
|
||||
# result = {}
|
||||
# result['error'] = _(e.msg)
|
||||
# return HttpResponse(json.dumps(result),
|
||||
# content_type='application/json; charset=utf-8')
|
||||
|
||||
if self.request.is_ajax():
|
||||
return self.ajax_form_valid()
|
||||
else:
|
||||
return FormMixin.form_valid(self, form)
|
||||
# if self.request.is_ajax():
|
||||
# return self.ajax_form_valid()
|
||||
# else:
|
||||
# return FormMixin.form_valid(self, form)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
groups = [ g for g in get_personal_groups(self.get_username()) \
|
||||
if self.is_proj_group(g.id)]
|
||||
kwargs['groups'] = groups
|
||||
return kwargs
|
||||
# def get_context_data(self, **kwargs):
|
||||
# groups = [ g for g in get_personal_groups_by_user(self.get_username()) \
|
||||
# if self.is_proj_group(g.id)]
|
||||
# kwargs['groups'] = groups
|
||||
# return kwargs
|
||||
|
||||
@login_required
|
||||
def group_remove(request, group_id):
|
||||
@@ -611,12 +612,6 @@ def group_share_repo(request, repo_id, group_id, from_email, permission):
|
||||
if not group:
|
||||
return render_error(request, u'共享失败:小组不存在')
|
||||
|
||||
# Check whether user belongs to the group.
|
||||
joined = is_group_user(int(group.id), request.user.username)
|
||||
|
||||
if not joined:
|
||||
return render_error(request, u'共享失败:未加入该小组')
|
||||
|
||||
if seafserv_threaded_rpc.group_share_repo(repo_id, group_id, from_email, permission) != 0:
|
||||
return render_error(request, u'共享失败:内部错误')
|
||||
|
||||
@@ -630,12 +625,6 @@ def group_unshare_repo(request, repo_id, group_id, from_email):
|
||||
if not group:
|
||||
return render_error(request, u'取消共享失败:小组不存在')
|
||||
|
||||
# Check whether user belongs to the group.
|
||||
joined = is_group_user(group_id, request.user.username)
|
||||
|
||||
if not joined:
|
||||
return render_error(request, u'取消共享失败:未加入该小组')
|
||||
|
||||
# Check whether user is group staff or the one share the repo
|
||||
if not check_group_staff(group_id, from_email) and \
|
||||
seafserv_threaded_rpc.get_group_repo_owner(repo_id) != from_email:
|
||||
@@ -683,7 +672,7 @@ def group_recommend(request):
|
||||
groups = get_org_groups_by_user(org_id, username)
|
||||
|
||||
else:
|
||||
groups = get_personal_groups(request.user.username)
|
||||
groups = get_personal_groups_by_user(request.user.username)
|
||||
|
||||
find = False
|
||||
for group in groups:
|
||||
|
@@ -53,26 +53,18 @@ def share_repo(request):
|
||||
|
||||
to_email_list = string2list(email_or_group)
|
||||
for to_email in to_email_list:
|
||||
# if to_email is user name, the format is: 'example@mail.com';
|
||||
# if to_email is group, the format is 'group_name <creator@mail.com>'
|
||||
if (to_email.split(' ')[0].find('@') == -1):
|
||||
if to_email.find('@') == -1:
|
||||
''' Share repo to group '''
|
||||
# TODO: if we know group id, then we can simplly call group_share_repo
|
||||
if len(to_email.split(' ')) < 2:
|
||||
msg = u'共享给 %s 失败。' % to_email
|
||||
messages.add_message(request, messages.ERROR, msg)
|
||||
continue
|
||||
group_name = to_email
|
||||
|
||||
group_name = to_email.split(' ')[0]
|
||||
group_creator = to_email.split(' ')[1]
|
||||
# get all the groups the user joined
|
||||
groups = get_personal_groups(request.user.username)
|
||||
# get all personal groups
|
||||
groups = get_personal_groups(-1, -1)
|
||||
find = False
|
||||
for group in groups:
|
||||
# for every group that user joined, if group name and
|
||||
# group creator matchs, then has find the group
|
||||
if group.props.group_name == group_name and \
|
||||
group_creator.find(group.props.creator_name) >= 0:
|
||||
# for every group that user joined, if group name matchs,
|
||||
# then has find the group
|
||||
if group.props.group_name == group_name:
|
||||
from seahub.group.views import group_share_repo
|
||||
group_share_repo(request, repo_id, int(group.props.id),
|
||||
from_email, permission)
|
||||
@@ -83,7 +75,7 @@ def share_repo(request):
|
||||
messages.add_message(request, messages.INFO, msg)
|
||||
break
|
||||
if not find:
|
||||
msg = u'共享到 %s 失败。' % group_name
|
||||
msg = u'共享到 %s 失败,小组不存在。' % group_name
|
||||
messages.add_message(request, messages.ERROR, msg)
|
||||
else:
|
||||
''' Share repo to user '''
|
||||
|
@@ -30,12 +30,6 @@
|
||||
{% if grpmsg_reply_list %}
|
||||
<li><a href="{{ SITE_ROOT }}group/reply/new/" class="no-bold">{{ grpmsg_reply_list|length }}条小组留言有新回复</a></li>
|
||||
{% endif %}
|
||||
{% if new_innerpub_msg %}
|
||||
<li><a href="{% url 'public_home' %}" class="no-bold">公共页面有新留言</a></li>
|
||||
{% endif %}
|
||||
{% if innerpubmsg_reply_list %}
|
||||
<li><a href="{% url 'innerpub_msg_reply_new' %}" class="no-bold">{{ innerpubmsg_reply_list|length }}条公共留言有新回复</a></li>
|
||||
{% endif %}
|
||||
{% if orgmsg_list %}
|
||||
<li><a href="{% url 'org_msg' %}" class="no-bold">{{ orgmsg_list|length }}条团体消息</a></li>
|
||||
{% endif %}
|
||||
|
@@ -6,7 +6,7 @@ $(function() {
|
||||
{% endfor %}
|
||||
|
||||
{% for group in groups %}
|
||||
share_list.push('{{ group.props.group_name }} <{{ group.props.creator_name }}>');
|
||||
share_list.push('{{ group.props.group_name }}');
|
||||
{% endfor %}
|
||||
|
||||
$(".repo-share-btn").click(function() {
|
||||
|
@@ -4,7 +4,8 @@ from service import ccnet_rpc, monitor_rpc, seafserv_rpc, \
|
||||
seafserv_threaded_rpc, ccnet_threaded_rpc
|
||||
from service import send_command
|
||||
from service import get_emailusers
|
||||
from service import get_org_groups, get_personal_groups, get_group_repoids, \
|
||||
from service import get_org_groups, get_personal_groups_by_user, \
|
||||
get_group_repoids, get_personal_groups, \
|
||||
check_group_staff, remove_group_user, get_group, get_org_id_by_group, \
|
||||
get_group_members, get_shared_groups_by_repo, is_group_user, \
|
||||
get_org_group_repos, get_group_repos, get_org_groups_by_user, is_org_group,\
|
||||
|
@@ -106,6 +106,26 @@ def get_group(group_id):
|
||||
group = None
|
||||
return group
|
||||
|
||||
def get_personal_groups(start, limit):
|
||||
try:
|
||||
groups_all = ccnet_threaded_rpc.get_all_groups(start, limit)
|
||||
except SearpcError:
|
||||
return []
|
||||
return [ x for x in groups_all if not is_org_group(x.id) ]
|
||||
|
||||
def get_personal_groups_by_user(email):
|
||||
try:
|
||||
groups_all = ccnet_threaded_rpc.get_groups(email)
|
||||
except SearpcError:
|
||||
return []
|
||||
|
||||
personal_groups = []
|
||||
for group in groups_all:
|
||||
if not is_org_group(group.id):
|
||||
personal_groups.append(group)
|
||||
|
||||
return personal_groups
|
||||
|
||||
# group user
|
||||
def is_group_user(group_id, user):
|
||||
try:
|
||||
@@ -174,19 +194,6 @@ def get_org_groups_by_user(org_id, user):
|
||||
|
||||
return org_groups
|
||||
|
||||
def get_personal_groups(email):
|
||||
try:
|
||||
groups_all = ccnet_threaded_rpc.get_groups(email)
|
||||
except SearpcError:
|
||||
return []
|
||||
|
||||
personal_groups = []
|
||||
for group in groups_all:
|
||||
if not is_org_group(group.id):
|
||||
personal_groups.append(group)
|
||||
|
||||
return personal_groups
|
||||
|
||||
# org
|
||||
def create_org(org_name, url_prefix, username):
|
||||
ccnet_threaded_rpc.create_org(org_name, url_prefix, username)
|
||||
|
6
urls.py
6
urls.py
@@ -5,7 +5,7 @@ from django.views.generic.simple import direct_to_template
|
||||
from seahub.views import *
|
||||
from notifications.views import notification_list
|
||||
from share.views import share_admin
|
||||
from group.views import GroupListView, DeptGroupListView, ProjGroupListView
|
||||
from group.views import GroupListView
|
||||
|
||||
# Uncomment the next two lines to enable the admin:
|
||||
#from django.contrib import admin
|
||||
@@ -90,8 +90,8 @@ urlpatterns = patterns('',
|
||||
(r'^contacts/', include('contacts.urls')),
|
||||
(r'^group/', include('seahub.group.urls')),
|
||||
url(r'^groups/', GroupListView.as_view(), name='group_list'),
|
||||
url(r'^deptgroups/', DeptGroupListView.as_view(), name='dept_group_list'),
|
||||
url(r'^projgroups/', ProjGroupListView.as_view(), name='proj_group_list'),
|
||||
# url(r'^deptgroups/', DeptGroupListView.as_view(), name='dept_group_list'),
|
||||
# url(r'^projgroups/', ProjGroupListView.as_view(), name='proj_group_list'),
|
||||
(r'^profile/', include('seahub.profile.urls')),
|
||||
|
||||
### SeaHub admin ###
|
||||
|
21
views.py
21
views.py
@@ -33,8 +33,9 @@ from auth.tokens import default_token_generator
|
||||
from share.models import FileShare
|
||||
from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_repos, get_emailusers, \
|
||||
get_repo, get_commits, get_branches, is_valid_filename, remove_group_user,\
|
||||
seafserv_threaded_rpc, seafserv_rpc, get_binding_peerids, is_inner_pub_repo, \
|
||||
check_group_staff, get_personal_groups, is_repo_owner, del_org_group_repo,\
|
||||
seafserv_threaded_rpc, seafserv_rpc, get_binding_peerids, is_repo_owner, \
|
||||
check_group_staff, get_personal_groups_by_user, is_inner_pub_repo, \
|
||||
del_org_group_repo, get_personal_groups, \
|
||||
get_group, get_shared_groups_by_repo, is_group_user, check_permission, \
|
||||
list_personal_shared_repos, is_org_group, get_org_id_by_group, is_org_repo,\
|
||||
list_inner_pub_repos, get_org_groups_by_repo, is_org_repo_owner, \
|
||||
@@ -758,8 +759,6 @@ def myhome(request):
|
||||
grpmsg_reply_list = []
|
||||
orgmsg_list = []
|
||||
notes = UserNotification.objects.filter(to_user=request.user.username)
|
||||
new_innerpub_msg = False
|
||||
innerpubmsg_reply_list = []
|
||||
for n in notes:
|
||||
if n.msg_type == 'group_msg':
|
||||
grp = get_group(n.detail)
|
||||
@@ -770,13 +769,9 @@ def myhome(request):
|
||||
grpmsg_reply_list.append(n.detail)
|
||||
elif n.msg_type == 'org_join_msg':
|
||||
orgmsg_list.append(n.detail)
|
||||
elif n.msg_type == 'innerpub_msg':
|
||||
new_innerpub_msg = True
|
||||
elif n.msg_type == 'innerpubmsg_reply':
|
||||
innerpubmsg_reply_list.append(n.detail)
|
||||
|
||||
# my groups
|
||||
groups = get_personal_groups(email)
|
||||
# Get all personal groups used in autocomplete.
|
||||
groups = get_personal_groups(-1, -1)
|
||||
|
||||
# get nickname
|
||||
if not Profile.objects.filter(user=request.user.username):
|
||||
@@ -785,10 +780,6 @@ def myhome(request):
|
||||
profile = Profile.objects.filter(user=request.user.username)[0]
|
||||
nickname = profile.nickname
|
||||
|
||||
# ctx_dict = {'base_template': 'myhome_base.html',
|
||||
# 'org_dict': None}
|
||||
# set_cur_ctx(request, ctx_dict)
|
||||
|
||||
return render_to_response('myhome.html', {
|
||||
"myname": email,
|
||||
"nickname": nickname,
|
||||
@@ -801,8 +792,6 @@ def myhome(request):
|
||||
"grpmsg_list": grpmsg_list,
|
||||
"grpmsg_reply_list": grpmsg_reply_list,
|
||||
"orgmsg_list": orgmsg_list,
|
||||
"new_innerpub_msg": new_innerpub_msg,
|
||||
"innerpubmsg_reply_list": innerpubmsg_reply_list,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
|
Reference in New Issue
Block a user