1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-17 07:41:26 +00:00

Add group public page

This commit is contained in:
xiez
2012-09-26 17:05:32 +08:00
parent 5b4468ea7c
commit 91d3d78dda
6 changed files with 157 additions and 13 deletions

View File

@@ -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个字符',
})

View File

@@ -0,0 +1,10 @@
{% autoescape off %}
亲爱的 {{ staff }}
{{ user }} 申请加入群组 {{ group.group_name }},验证信息:
{{ group_join_msg }}
感谢使用我们的网站!
Seafile团队
{% endautoescape %}

View File

@@ -0,0 +1,64 @@
{% extends "myhome_base.html" %}
{% load seahub_tags group_avatar_tags %}
{% load url from future %}
{% block main_panel %}
<div class="user-profile narrow-panel ovhd">
<div class="pic fleft">
<img src="{% grp_avatar_url group.id 48 %}" alt="{{ group.group_name }}的图标" title="{{ group.group_name }}" class="avatar" />
<button id="add">申请加入</button>
</div>
<div class="txt fright">
<p>名称:{{ group.group_name }}</p>
<p>管理员:{{ group.creator_name }}</p>
<p>创建于:{{ group.timestamp|tsstr_sec }}</p>
<p>人数:{{ members|length }}</p>
</div>
</div>
<form id="group-join-form" class="hide" action="" method="post">
<label>验证信息:</label><br />
<textarea id="id_group_join_msg" name="group_join_msg"></textarea><br />
<p class="error hide"></p>
<input type="submit" value="提交" id="group-join-submit" />
</form>
{% endblock %}
{% block extra_script %}
<script type="text/javascript">
$('#add').click(function() {
$('#group-join-form').modal({appendTo: '#main'});
});
$('#group-join-submit').click(function() {
$.ajax({
url: '{% url 'group_joinrequest' group.id %}',
type: 'POST',
dataType: 'json',
cache: 'false',
beforeSend: prepareCSRFToken,
data: {
'group_join_msg': $('#id_group_join_msg').val(),
},
success: function(data) {
location.reload(true);
},
error: function(data, textStatus, jqXHR) {
var errors = $.parseJSON(data.responseText);
$.each(errors, function(index, value) {
if (index == 'error') {
apply_form_error('group-join-form', value);
} else {
apply_form_error('group-join-form', value[0]);
}
});
}
});
return false;
});
</script>
{% endblock %}

View File

@@ -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<group_id>[\d]+)/$', group_info, name='group_info'),
@@ -12,4 +12,5 @@ urlpatterns = patterns('',
url(r'^(?P<group_id>[\d]+)/create-repo/$', create_group_repo, name='create_group_repo'),
(r'^(?P<group_id>[\d]+)/member/(?P<user_name>[^/]+)/$', group_member_operations),
url(r'^recommend/$', group_recommend, name='group_recommend'),
url(r'^joinrequest/(?P<group_id>[\d]+)/$', group_joinrequest, name='group_joinrequest'),
)

View File

@@ -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)

View File

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