diff --git a/group/forms.py b/group/forms.py index 7778ff6e42..476a109bf8 100644 --- a/group/forms.py +++ b/group/forms.py @@ -35,3 +35,13 @@ class GroupAddForm(forms.Form): raise forms.ValidationError(error_msg) else: return group_name + +class GroupJoinMsgForm(forms.Form): + """ + A form used to send group join request message. + """ + group_join_msg = forms.CharField(max_length=255, error_messages={ + 'required': u'验证信息不能为空', + 'max_length': u'验证信息太长,不超过255个字符', + }) + diff --git a/group/templates/group/group_join_email.html b/group/templates/group/group_join_email.html new file mode 100644 index 0000000000..3fa730c64f --- /dev/null +++ b/group/templates/group/group_join_email.html @@ -0,0 +1,10 @@ +{% autoescape off %} +亲爱的 {{ staff }}: +{{ user }} 申请加入群组 {{ group.group_name }},验证信息: +{{ group_join_msg }} + +感谢使用我们的网站! + +Seafile团队 + +{% endautoescape %} diff --git a/group/templates/group/group_pubinfo.html b/group/templates/group/group_pubinfo.html new file mode 100644 index 0000000000..f1ca0afe69 --- /dev/null +++ b/group/templates/group/group_pubinfo.html @@ -0,0 +1,64 @@ +{% extends "myhome_base.html" %} +{% load seahub_tags group_avatar_tags %} +{% load url from future %} + +{% block main_panel %} +
+
+ {{ group.group_name }}的图标 + +
+ +
+

名称:{{ group.group_name }}

+

管理员:{{ group.creator_name }}

+

创建于:{{ group.timestamp|tsstr_sec }}

+

人数:{{ members|length }}

+
+
+ +
+
+
+

+ +
+{% endblock %} + +{% block extra_script %} + +{% endblock %} diff --git a/group/urls.py b/group/urls.py index f8a41cc1a7..ab6b6cec7b 100644 --- a/group/urls.py +++ b/group/urls.py @@ -2,7 +2,7 @@ from django.conf.urls.defaults import * from views import group_info, group_member_operations, \ group_members, msg_reply, msg_reply_new, group_recommend, \ - create_group_repo + create_group_repo, group_joinrequest urlpatterns = patterns('', url(r'^(?P[\d]+)/$', group_info, name='group_info'), @@ -12,4 +12,5 @@ urlpatterns = patterns('', url(r'^(?P[\d]+)/create-repo/$', create_group_repo, name='create_group_repo'), (r'^(?P[\d]+)/member/(?P[^/]+)/$', group_member_operations), url(r'^recommend/$', group_recommend, name='group_recommend'), + url(r'^joinrequest/(?P[\d]+)/$', group_joinrequest, name='group_joinrequest'), ) diff --git a/group/views.py b/group/views.py index 205c3aa45e..da96c0bdd2 100644 --- a/group/views.py +++ b/group/views.py @@ -25,7 +25,7 @@ from pysearpc import SearpcError from models import GroupMessage, MessageReply, MessageAttachment, BusinessGroup from forms import MessageForm, MessageReplyForm, GroupRecommendForm, \ - GroupAddForm + GroupAddForm, GroupJoinMsgForm from signals import grpmsg_added, grpmsg_reply_added from base.decorators import ctx_switch_required from base.mixins import LoginRequiredMixin @@ -255,26 +255,27 @@ def render_group_info(request, group_id, form): msg_type='group_msg', detail=str(group_id)).delete() - # Check whether user belongs to the group. - joined = is_group_user(group_id_int, request.user.username) - - if not joined and not request.user.is_staff: - return render_error(request, u'未加入该群组') - - # if request.user.org and not request.user.org.is_staff: - # return render_error(request, u'未加入该群组') - group = get_group(group_id) if not group: return HttpResponseRedirect(reverse('group_list', args=[])) + # Get all group members. + members = get_group_members(group_id_int) + + # Check whether user belongs to the group. + joined = is_group_user(group_id_int, request.user.username) + if not joined and not request.user.is_staff: + # Return group public info page. + return render_to_response('group/group_pubinfo.html', { + 'members': members, + 'group': group, + }, context_instance=RequestContext(request)) + is_staff = True if check_group_staff(group.id, request.user) else False - members = get_group_members(group_id_int) managers = [] common_members = [] for member in members: -# member.short_username = member.user_name.split('@')[0] if member.is_staff == 1: managers.append(member) else: @@ -803,3 +804,55 @@ def create_group_repo(request, group_id): return HttpResponse(json.dumps(result), content_type=content_type) +@login_required +def group_joinrequest(request, group_id): + """ + Handle post request to join a group. + """ + if not request.is_ajax() or request.method != 'POST': + raise Http404 + + result = {} + content_type = 'application/json; charset=utf-8' + + group_id = int(group_id) + group =get_group(group_id) + if not group: + raise Http404 + + user = request.user.username + # TODO: Group creator is group staff now, but may changed in future. + staff = group.creator_name + if is_group_user(group_id, user): + # Already in the group. Normally, this case should not happen. + err = u'你已经在该群组。' + return HttpResponseBadRequest(json.dumps({'error': err}), + content_type=content_type) + else: + form = GroupJoinMsgForm(request.POST) + if form.is_valid(): + group_join_msg = form.cleaned_data['group_join_msg'] + # Send the message to group staff. + use_https = request.is_secure() + domain = RequestSite(request).domain + t = loader.get_template('group/group_join_email.html') + c = { + 'staff': staff, + 'user': user, + 'group': group, + 'group_join_msg': group_join_msg, + } + try: + send_mail(u'加入群组申请', t.render(Context(c)), None, [staff], + fail_silently=False) + messages.success(request, u'发送成功,等候群组管理员处理。') + return HttpResponse(json.dumps('success'), + content_type=content_type) + except: + err = u'发送失败,请稍后再试。' + return HttpResponse(json.dumps({'error': err}), status=500, + content_type=content_type) + else: + return HttpResponseBadRequest(json.dumps(form.errors), + content_type=content_type) + diff --git a/media/css/seahub.css b/media/css/seahub.css index 33d4f50d6e..7bb99b4248 100644 --- a/media/css/seahub.css +++ b/media/css/seahub.css @@ -885,6 +885,12 @@ ul.with-bg li { width:262px; margin:5px 0; } +/* group-join-form */ +#id_group_join_msg { + width:260px; + height:80px; +} + #recommend-msg, #recommend-groups { width:450px;