mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-17 15:53:28 +00:00
Add group public page
This commit is contained in:
@@ -35,3 +35,13 @@ class GroupAddForm(forms.Form):
|
|||||||
raise forms.ValidationError(error_msg)
|
raise forms.ValidationError(error_msg)
|
||||||
else:
|
else:
|
||||||
return group_name
|
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, \
|
from views import group_info, group_member_operations, \
|
||||||
group_members, msg_reply, msg_reply_new, group_recommend, \
|
group_members, msg_reply, msg_reply_new, group_recommend, \
|
||||||
create_group_repo
|
create_group_repo, group_joinrequest
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
url(r'^(?P<group_id>[\d]+)/$', group_info, name='group_info'),
|
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'),
|
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),
|
(r'^(?P<group_id>[\d]+)/member/(?P<user_name>[^/]+)/$', group_member_operations),
|
||||||
url(r'^recommend/$', group_recommend, name='group_recommend'),
|
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 models import GroupMessage, MessageReply, MessageAttachment, BusinessGroup
|
||||||
from forms import MessageForm, MessageReplyForm, GroupRecommendForm, \
|
from forms import MessageForm, MessageReplyForm, GroupRecommendForm, \
|
||||||
GroupAddForm
|
GroupAddForm, GroupJoinMsgForm
|
||||||
from signals import grpmsg_added, grpmsg_reply_added
|
from signals import grpmsg_added, grpmsg_reply_added
|
||||||
from base.decorators import ctx_switch_required
|
from base.decorators import ctx_switch_required
|
||||||
from base.mixins import LoginRequiredMixin
|
from base.mixins import LoginRequiredMixin
|
||||||
@@ -255,26 +255,27 @@ def render_group_info(request, group_id, form):
|
|||||||
msg_type='group_msg',
|
msg_type='group_msg',
|
||||||
detail=str(group_id)).delete()
|
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)
|
group = get_group(group_id)
|
||||||
if not group:
|
if not group:
|
||||||
return HttpResponseRedirect(reverse('group_list', args=[]))
|
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
|
is_staff = True if check_group_staff(group.id, request.user) else False
|
||||||
|
|
||||||
members = get_group_members(group_id_int)
|
|
||||||
managers = []
|
managers = []
|
||||||
common_members = []
|
common_members = []
|
||||||
for member in members:
|
for member in members:
|
||||||
# member.short_username = member.user_name.split('@')[0]
|
|
||||||
if member.is_staff == 1:
|
if member.is_staff == 1:
|
||||||
managers.append(member)
|
managers.append(member)
|
||||||
else:
|
else:
|
||||||
@@ -803,3 +804,55 @@ def create_group_repo(request, group_id):
|
|||||||
return HttpResponse(json.dumps(result),
|
return HttpResponse(json.dumps(result),
|
||||||
content_type=content_type)
|
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;
|
width:262px;
|
||||||
margin:5px 0;
|
margin:5px 0;
|
||||||
}
|
}
|
||||||
|
/* group-join-form */
|
||||||
|
#id_group_join_msg {
|
||||||
|
width:260px;
|
||||||
|
height:80px;
|
||||||
|
}
|
||||||
|
|
||||||
#recommend-msg,
|
#recommend-msg,
|
||||||
#recommend-groups {
|
#recommend-groups {
|
||||||
width:450px;
|
width:450px;
|
||||||
|
Reference in New Issue
Block a user