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.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;