From 4ac81a45247f81349e3ea93b832457309d60fd99 Mon Sep 17 00:00:00 2001 From: zhengxie Date: Mon, 22 Oct 2012 11:54:06 +0800 Subject: [PATCH] Modified group adding member --- group/decorators.py | 17 +++ group/locale/zh_CN/LC_MESSAGES/django.mo | Bin 1628 -> 2006 bytes group/locale/zh_CN/LC_MESSAGES/django.po | 28 ++++- group/urls.py | 2 +- group/views.py | 128 ++++++++++++----------- 5 files changed, 108 insertions(+), 67 deletions(-) create mode 100644 group/decorators.py diff --git a/group/decorators.py b/group/decorators.py new file mode 100644 index 0000000000..12fc8a840c --- /dev/null +++ b/group/decorators.py @@ -0,0 +1,17 @@ +from django.http import Http404 + +from seaserv import check_group_staff + +def group_staff_required(func): + """ + Decorator for views that checks the user is group staff. + + """ + def _decorated(request, *args, **kwargs): + group_id = int(kwargs.get('group_id', '0')) # Checked by URL Conf + + if check_group_staff(group_id, request.user): + return func(request, *args, **kwargs) + raise Http404 + return _decorated + diff --git a/group/locale/zh_CN/LC_MESSAGES/django.mo b/group/locale/zh_CN/LC_MESSAGES/django.mo index 7dd9611b68631b4234ae743e4b4bb44278a11233..9c8ac1ae605903c9a2a4eb8b6972363f0720ddd6 100644 GIT binary patch delta 738 zcmZ|L&ui0Q9LMn|TkQN%JMDA_r|g+itW(M=q97>Bq+Z0syn3lkEP*zWBt0nNW))G{ zm?MgV^`N3K#0^G=3bmjfMRwGS=)op9Q1>tRepZ=Y{K7Y{KH+)3`Skf5|JXV5C8^&R zR2RLSUZ8i-r!^kb8{CR-@fd!>LF{g8?K_3ttWE5}E4T%xa3jv*CamL5{D2u;#$F*t zL|=Pr!wFP_hcS!Su^-=~3iJyHFs=)cC&Xb)vYuYkIyZ;ASbs$oSdR(OiQ7;G8$k6w zi+k`KCi%X&!4Ea~!5`nDWc?H4nCK89g*|u_PojEX!9JWo_2GFWmsn4$+f=0js#{P& zRBfioE!f(sH|3A8#sKjn3(9|hD%+Y zcmWa$3D6PF9gO6{1Ae$Op1YhK37qjoWyGb(~-YpKu4? zaSIn%#ue`48ao&{BD;8o`uq}Oyv1{llUE8o_y^lqa78ZoxQh|@k6yaK40Xvl>fldo z;u`h6>PGr~``-~Z=-*+8FWAC29N-u3$rXqDA_p{1khwx%3Zw=t$&t*+qDZBG%)VLV yvnnlg(SX#!o1|+$Ov{d((`4qgSgS@_K$nX)H^b^;>XF@KQ#6}82$k`S|*PG diff --git a/group/locale/zh_CN/LC_MESSAGES/django.po b/group/locale/zh_CN/LC_MESSAGES/django.po index bb72d7ffdf..553273cbe4 100644 --- a/group/locale/zh_CN/LC_MESSAGES/django.po +++ b/group/locale/zh_CN/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-20 16:28+0800\n" +"POT-Creation-Date: 2012-10-22 11:46+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -58,21 +58,39 @@ msgstr "只有群组管理员可以删除成员。" msgid "Can not remove myself" msgstr "无法删除自己" -#: views.py:761 +#: views.py:553 +#, python-format +msgid "Failed to add group member, %s is not in current organization." +msgstr "添加成员失败,%s 未在当前团体中。" + +#: views.py:586 +msgid "Failed to send mail." +msgstr "邮件发送失败。" + +#: views.py:603 +#, python-format +msgid "Failed to add group member, %s is not registerd." +msgstr "添加成员失败,%s 未注册。" + +#: views.py:615 +msgid "Successfully added group member(s)." +msgstr "操作成功" + +#: views.py:772 msgid "Recommend error: wrong group id" msgstr "推荐失败:群组id不正确" -#: views.py:769 +#: views.py:780 #, python-format msgid "Recommend to %s error: you are not in that group" msgstr "推荐到 %s 失败:未参加该群组" -#: views.py:789 +#: views.py:800 #, python-format msgid "" "Recommend to %(name)s success。" msgstr "推荐到%(name)s成功" -#: views.py:794 +#: views.py:805 msgid "Recommend failed" msgstr "推荐失败" diff --git a/group/urls.py b/group/urls.py index 20e8a768f2..5d3b1ab0d7 100644 --- a/group/urls.py +++ b/group/urls.py @@ -8,7 +8,7 @@ urlpatterns = patterns('', url(r'^(?P[\d]+)/$', group_info, name='group_info'), url(r'^reply/(?P[\d]+)/$', msg_reply, name='msg_reply'), url(r'^reply/new/$', msg_reply_new, name='msg_reply_new'), - url(r'^(?P[\d]+)/members/$', group_members, name='group_members'), + url(r'^(?P\d+)/members/$', group_members, name='group_members'), url(r'^(?P[\d]+)/create-repo/$', create_group_repo, name='create_group_repo'), (r'^(?P[\d]+)/member/(?P[^/]+)/$', group_member_operations), url(r'^(?P\d+)/msgdel/(?P\d+)/$', group_message_remove, name='group_message_remove'), diff --git a/group/views.py b/group/views.py index 5dd3248633..9f5d306f47 100644 --- a/group/views.py +++ b/group/views.py @@ -23,6 +23,7 @@ from seaserv import ccnet_rpc, ccnet_threaded_rpc, seafserv_threaded_rpc, \ get_org_groups_by_user, check_permission from pysearpc import SearpcError +from decorators import group_staff_required from models import GroupMessage, MessageReply, MessageAttachment, BusinessGroup from forms import MessageForm, MessageReplyForm, GroupRecommendForm, \ GroupAddForm, GroupJoinMsgForm @@ -519,106 +520,111 @@ def group_info(request, group_id): @login_required @ctx_switch_required +@group_staff_required def group_members(request, group_id): - try: - group_id_int = int(group_id) - except ValueError: - return render_error(request, u'group id 不是有效参数') - - if not check_group_staff(group_id_int, request.user): - raise Http404 + group_id = int(group_id) # Checked by URL Conf group = get_group(group_id) if not group: return HttpResponseRedirect(reverse('group_list', args=[])) - + + user = request.user.username + if request.method == 'POST': """ Add group members. """ result = {} content_type = 'application/json; charset=utf-8' - - member_name_str = request.POST.get('user_name', '') + member_name_str = request.POST.get('user_name', '') member_list = string2list(member_name_str) - if request.user.org: - for member_name in member_list: - # Add user to contacts. - mail_sended.send(sender=None, user=request.user.username, - email=member_name) + # Add users to contacts. + for email in member_list: + mail_sended.send(sender=None, user=user, email=email) + + if request.cloud_mode: + if request.user.org: + # Can only invite org users to group. + org_id = request.user.org['org_id'] + for email in member_list: + if not ccnet_threaded_rpc.org_user_exists(org_id, email): + err_msg = _(u'Failed to add group member, %s is not in current organization.') % email + result['error'] = err_msg + return HttpResponse(json.dumps(result), status=400, + content_type=content_type) + else: + try: + ccnet_threaded_rpc.group_add_member(group_id, + user, email) + except SearpcError, e: + result['error'] = _(e.msg) + return HttpResponse(json.dumps(result), status=500, + content_type=content_type) + else: + # Can invite unregistered user to group. + for email in member_list: + if not is_registered_user(email): + use_https = request.is_secure() + domain = RequestSite(request).domain - # Can not add unregistered user to group in org context. - if not ccnet_threaded_rpc.org_user_exists(request.user.org['org_id'], - member_name): - err_msg = u'无法添加成员,当前企业不存在 %s 用户' % member_name - result['error'] = err_msg - return HttpResponse(json.dumps(result), status=400, - content_type=content_type) - else: + t = loader.get_template('group/add_member_email.html') + c = { + 'email': user, + 'to_email': email, + 'group': group, + 'domain': domain, + 'protocol': use_https and 'https' or 'http', + } + + try: + send_mail('您的好友在SeaCloud上将你加入到群组', + t.render(Context(c)), None, [email], + fail_silently=False) + except: + data = json.dumps({'error': _(u'Failed to send mail.')}) + return HttpResponse(data, status=500, + content_type=content_type) + + # Add user to group, unregistered user will see the group + # when he logs in. try: - ccnet_threaded_rpc.group_add_member(group_id_int, - request.user.username, - member_name) + ccnet_threaded_rpc.group_add_member(group_id, + user, email) except SearpcError, e: result['error'] = _(e.msg) return HttpResponse(json.dumps(result), status=500, content_type=content_type) else: - for member_name in member_list: - # Add user to contacts. - mail_sended.send(sender=None, user=request.user.username, - email=member_name) - - if not is_registered_user(member_name): - err_msg = u'无法添加成员,%s 未注册' % member_name - result['error'] = err_msg + # Can only invite registered user to group if not in cloud mode. + for email in member_list: + if not is_registered_user(email): + err_msg = _(u'Failed to add group member, %s is not registerd.') + result['error'] = err_msg % email return HttpResponse(json.dumps(result), status=400, content_type=content_type) - - # use_https = request.is_secure() - # domain = RequestSite(request).domain - - # t = loader.get_template('group/add_member_email.html') - # c = { - # 'email': request.user.username, - # 'to_email': member_name, - # 'group': group, - # 'domain': domain, - # 'protocol': use_https and 'https' or 'http', - # } - - # try: - # send_mail('您的好友在SeaCloud上将你加入到群组', - # t.render(Context(c)), None, [member_name], - # fail_silently=False) - # except: - # data = json.dumps({'error': u'发送失败'}) - # return HttpResponse(data, status=500, - # content_type=content_type) # Add user to group. try: - ccnet_threaded_rpc.group_add_member(group_id_int, - request.user.username, - member_name) + ccnet_threaded_rpc.group_add_member(group_id, + user, email) except SearpcError, e: result['error'] = _(e.msg) return HttpResponse(json.dumps(result), status=500, content_type=content_type) - messages.success(request, u'操作成功') + messages.success(request, _(u'Successfully added group member(s).')) return HttpResponse(json.dumps('success'), status=200, content_type=content_type) ### GET ### - members_all = ccnet_threaded_rpc.get_group_members(group_id_int) + members_all = ccnet_threaded_rpc.get_group_members(group_id) members, admins = [], [] for m in members_all: if m.is_staff: admins.append(m) else: members.append(m) - contacts = Contact.objects.filter(user_email=request.user.username) + contacts = Contact.objects.filter(user_email=user) return render_to_response('group/group_manage.html', { 'group' : group,