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:
@@ -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个字符',
|
||||
})
|
||||
|
||||
|
10
group/templates/group/group_join_email.html
Normal file
10
group/templates/group/group_join_email.html
Normal file
@@ -0,0 +1,10 @@
|
||||
{% autoescape off %}
|
||||
亲爱的 {{ staff }}:
|
||||
{{ user }} 申请加入群组 {{ group.group_name }},验证信息:
|
||||
{{ group_join_msg }}
|
||||
|
||||
感谢使用我们的网站!
|
||||
|
||||
Seafile团队
|
||||
|
||||
{% endautoescape %}
|
64
group/templates/group/group_pubinfo.html
Normal file
64
group/templates/group/group_pubinfo.html
Normal 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 %}
|
@@ -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'),
|
||||
)
|
||||
|
@@ -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)
|
||||
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user