mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-02 23:48:47 +00:00
Add business groups
This commit is contained in:
@@ -6,8 +6,7 @@ and returns a dictionary to add to the context.
|
||||
These are referenced from the setting TEMPLATE_CONTEXT_PROCESSORS and used by
|
||||
RequestContext.
|
||||
"""
|
||||
from settings import SEAFILE_VERSION
|
||||
from settings import SEAHUB_TITLE
|
||||
from settings import SEAFILE_VERSION, SEAHUB_TITLE, BUSINESS_MODE
|
||||
|
||||
def base(request):
|
||||
"""
|
||||
@@ -25,6 +24,7 @@ def base(request):
|
||||
return {
|
||||
'seafile_version': SEAFILE_VERSION,
|
||||
'seahub_title': SEAHUB_TITLE,
|
||||
'business_mode': BUSINESS_MODE,
|
||||
'cloud_mode': request.cloud_mode,
|
||||
'org': org,
|
||||
'base_template': base_template,
|
||||
|
@@ -33,6 +33,17 @@ class MessageAttachment(models.Model):
|
||||
path = models.TextField()
|
||||
src = models.CharField(max_length=20) # `recommend` or `filecomment`
|
||||
|
||||
class BusinessGroup(models.Model):
|
||||
"""
|
||||
Model used to represents department group or project group in business
|
||||
mode.
|
||||
"""
|
||||
group_id = models.IntegerField()
|
||||
group_type = models.CharField(max_length=10) # `dept` or `proj`
|
||||
|
||||
class Meta:
|
||||
unique_together = ("group_id", "group_type")
|
||||
|
||||
at_pattern = re.compile(r'(\s|^)(@\w+)', flags=re.U)
|
||||
|
||||
@receiver(post_save, sender=MessageReply)
|
||||
|
28
group/templates/group/dept_groups.html
Normal file
28
group/templates/group/dept_groups.html
Normal file
@@ -0,0 +1,28 @@
|
||||
{% extends "myhome_base.html" %}
|
||||
{% load url from future %}
|
||||
|
||||
{% block nav_deptgroup_class %}class="cur"{% endblock %}
|
||||
{% block left_panel %}
|
||||
<!-- 操作 -->
|
||||
{% include "group/groups_left_panel.html" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block right_panel %}
|
||||
<!-- 我的小组 -->
|
||||
{% include "group/groups_right_panel.html" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_script %}
|
||||
<script type="text/javascript">
|
||||
$("#group-add").click(function() {
|
||||
$("#group-add-form").modal({appendTo: "#main"});
|
||||
return false;
|
||||
});
|
||||
|
||||
{% url 'dept_group_list' as group_add_url %}
|
||||
{% with post_url=group_add_url %}
|
||||
{% include "snippets/group_add_js.html" %}
|
||||
{% endwith %}
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
@@ -1,42 +1,15 @@
|
||||
{% extends "myhome_base.html" %}
|
||||
{% load seahub_tags group_avatar_tags %}
|
||||
{% load url from future %}
|
||||
|
||||
{% block nav_group_class %}class="cur"{% endblock %}
|
||||
{% block left_panel %}
|
||||
<h3>操作</h3>
|
||||
<ul class="with-bg">
|
||||
<li><a id="group-add" href="#">添加小组</a></li>
|
||||
</ul>
|
||||
<!-- 操作 -->
|
||||
{% include "group/groups_left_panel.html" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block right_panel %}
|
||||
|
||||
<h3>我的小组</h3>
|
||||
{% if groups %}
|
||||
<ul class="group-list w100 ovhd">
|
||||
{% for group in groups %}
|
||||
<li class="group fleft">
|
||||
<div class="pic fleft">
|
||||
<a href="{{ SITE_ROOT }}group/{{ group.props.id }}/" class="no-deco">
|
||||
<img src="{% grp_avatar_url group.props.id 48 %}" alt="{{ group.props.group_name }}的图标" title="{{ group.props.group_name }}" class="avatar" />
|
||||
</a>
|
||||
</div>
|
||||
<div class="txt fright">
|
||||
<h4><a href="{{ SITE_ROOT }}group/{{ group.props.id }}/">{{ group.props.group_name }}</a></h4>
|
||||
<p><span class="item-name">创建者:</span>{{ group.props.creator_name }}</p>
|
||||
<p><span class="item-name">创建时间:</span>{{ group.props.timestamp|tsstr_sec }}</p>
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<p>暂无</p>
|
||||
{% endif %}
|
||||
|
||||
<!-- 添加小组 -->
|
||||
{% include "snippets/group_add_form.html" %}
|
||||
|
||||
<!-- 我的小组 -->
|
||||
{% include "group/groups_right_panel.html" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_script %}
|
||||
|
4
group/templates/group/groups_left_panel.html
Normal file
4
group/templates/group/groups_left_panel.html
Normal file
@@ -0,0 +1,4 @@
|
||||
<h3>操作</h3>
|
||||
<ul class="with-bg">
|
||||
<li><a id="group-add" href="#">添加小组</a></li>
|
||||
</ul>
|
30
group/templates/group/groups_right_panel.html
Normal file
30
group/templates/group/groups_right_panel.html
Normal file
@@ -0,0 +1,30 @@
|
||||
{% load seahub_tags group_avatar_tags %}
|
||||
{% load url from future %}
|
||||
|
||||
<h3>我的小组</h3>
|
||||
{% if groups %}
|
||||
<ul class="group-list w100 ovhd">
|
||||
{% for group in groups %}
|
||||
<li class="group fleft">
|
||||
<div class="pic fleft">
|
||||
<a href="{{ SITE_ROOT }}group/{{ group.props.id }}/" class="no-deco">
|
||||
<img src="{% grp_avatar_url group.props.id 48 %}" alt="{{ group.props.group_name }}的图标" title="{{ group.props.group_name }}" class="avatar" />
|
||||
</a>
|
||||
</div>
|
||||
<div class="txt fright">
|
||||
<h4><a href="{{ SITE_ROOT }}group/{{ group.props.id }}/">{{ group.props.group_name }}</a></h4>
|
||||
<p><span class="item-name">创建者:</span>{{ group.props.creator_name }}</p>
|
||||
<p><span class="item-name">创建时间:</span>{{ group.props.timestamp|tsstr_sec }}</p>
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<p>暂无</p>
|
||||
{% endif %}
|
||||
<form id="group-add-form" action="" method="post" name="group-add-form" class="hide">
|
||||
<label>小组名称:</label><br />
|
||||
<input id="group_name" name="group_name" value="" /><br />
|
||||
<p class="error hide"></p>
|
||||
<input id="group-add-submit" type="submit" value="提交" />
|
||||
</form>
|
28
group/templates/group/proj_groups.html
Normal file
28
group/templates/group/proj_groups.html
Normal file
@@ -0,0 +1,28 @@
|
||||
{% extends "myhome_base.html" %}
|
||||
{% load url from future %}
|
||||
|
||||
{% block nav_projgroup_class %}class="cur"{% endblock %}
|
||||
{% block left_panel %}
|
||||
<!-- 操作 -->
|
||||
{% include "group/groups_left_panel.html" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block right_panel %}
|
||||
<!-- 我的小组 -->
|
||||
{% include "group/groups_right_panel.html" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_script %}
|
||||
<script type="text/javascript">
|
||||
$("#group-add").click(function() {
|
||||
$("#group-add-form").modal({appendTo: "#main"});
|
||||
return false;
|
||||
});
|
||||
|
||||
{% url 'proj_group_list' as group_add_url %}
|
||||
{% with post_url=group_add_url %}
|
||||
{% include "snippets/group_add_js.html" %}
|
||||
{% endwith %}
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
@@ -18,7 +18,7 @@ from seaserv import ccnet_rpc, ccnet_threaded_rpc, seafserv_threaded_rpc, \
|
||||
get_org_group_repos, get_org_groups_by_user
|
||||
from pysearpc import SearpcError
|
||||
|
||||
from models import GroupMessage, MessageReply, MessageAttachment
|
||||
from models import GroupMessage, MessageReply, MessageAttachment, BusinessGroup
|
||||
from forms import MessageForm, MessageReplyForm, GroupRecommendForm
|
||||
from signals import grpmsg_added, grpmsg_reply_added
|
||||
from base.decorators import ctx_switch_required
|
||||
@@ -36,7 +36,6 @@ from seahub.forms import RepoCreateForm
|
||||
|
||||
@login_required
|
||||
def group_list(request):
|
||||
error_msg = None
|
||||
if request.method == 'POST':
|
||||
"""
|
||||
Add new group.
|
||||
@@ -64,6 +63,90 @@ def group_list(request):
|
||||
"groups": groups,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
def is_dept_group(group_id):
|
||||
try:
|
||||
BusinessGroup.objects.get(group_id=group_id, group_type='dept')
|
||||
ret = True
|
||||
except BusinessGroup.DoesNotExist:
|
||||
ret = False
|
||||
return ret
|
||||
|
||||
def is_proj_group(group_id):
|
||||
try:
|
||||
BusinessGroup.objects.get(group_id=group_id, group_type='proj')
|
||||
ret = True
|
||||
except BusinessGroup.DoesNotExist:
|
||||
ret = False
|
||||
return ret
|
||||
|
||||
@login_required
|
||||
def dept_group_list(request):
|
||||
if request.method == 'POST':
|
||||
"""
|
||||
Add new department group.
|
||||
"""
|
||||
result = {}
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
|
||||
group_name = request.POST.get('group_name')
|
||||
if not validate_group_name(group_name):
|
||||
result['error'] = u'小组名称只能包含中英文字符,数字及下划线。'
|
||||
return HttpResponse(json.dumps(result), content_type=content_type)
|
||||
|
||||
try:
|
||||
group_id = ccnet_threaded_rpc.create_group(group_name.encode('utf-8'),
|
||||
request.user.username)
|
||||
bg = BusinessGroup()
|
||||
bg.group_id = group_id
|
||||
bg.group_type = 'dept'
|
||||
bg.save()
|
||||
except SearpcError, e:
|
||||
result['error'] = _(e.msg)
|
||||
return HttpResponse(json.dumps(result), content_type=content_type)
|
||||
return HttpResponse(json.dumps({'success': True}),
|
||||
content_type=content_type)
|
||||
|
||||
groups = [ g for g in get_personal_groups(request.user.username) \
|
||||
if is_dept_group(g.id)]
|
||||
|
||||
return render_to_response("group/dept_groups.html", {
|
||||
"groups": groups,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
def proj_group_list(request):
|
||||
if request.method == 'POST':
|
||||
"""
|
||||
Add new department group.
|
||||
"""
|
||||
result = {}
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
|
||||
group_name = request.POST.get('group_name')
|
||||
if not validate_group_name(group_name):
|
||||
result['error'] = u'小组名称只能包含中英文字符,数字及下划线。'
|
||||
return HttpResponse(json.dumps(result), content_type=content_type)
|
||||
|
||||
try:
|
||||
group_id = ccnet_threaded_rpc.create_group(group_name.encode('utf-8'),
|
||||
request.user.username)
|
||||
bg = BusinessGroup()
|
||||
bg.group_id = group_id
|
||||
bg.group_type = 'proj'
|
||||
bg.save()
|
||||
except SearpcError, e:
|
||||
result['error'] = _(e.msg)
|
||||
return HttpResponse(json.dumps(result), content_type=content_type)
|
||||
return HttpResponse(json.dumps({'success': True}),
|
||||
content_type=content_type)
|
||||
|
||||
groups = [ g for g in get_personal_groups(request.user.username) \
|
||||
if is_proj_group(g.id)]
|
||||
|
||||
return render_to_response("group/proj_groups.html", {
|
||||
"groups": groups,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
def group_remove(request, group_id):
|
||||
"""
|
||||
|
@@ -202,6 +202,8 @@ SEAHUB_TITLE = 'SeaHub'
|
||||
|
||||
USE_SUBDOMAIN = False
|
||||
|
||||
BUSINESS_MODE = True
|
||||
|
||||
try:
|
||||
import local_settings
|
||||
except ImportError:
|
||||
|
@@ -1,4 +1,5 @@
|
||||
{% extends "base.html" %}
|
||||
{% load url from future %}
|
||||
{% block top_bar_myaccount_class %} class="cur"{% endblock %}
|
||||
{% block nav %}
|
||||
<ul class="nav">
|
||||
@@ -7,12 +8,21 @@
|
||||
</li>
|
||||
{% if not request.cloud_mode %}
|
||||
<li>
|
||||
<a href="{% url public_home %}" {% block nav_publichome_class %}{% endblock %}>公共页面</a>
|
||||
<a href="{% url 'public_home' %}" {% block nav_publichome_class %}{% endblock %}>公共页面</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if business_mode %}
|
||||
<li>
|
||||
<a href="{% url 'dept_group_list' %}" {% block nav_deptgroup_class %}{% endblock %}>部门组</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{% url 'proj_group_list' %}" {% block nav_projgroup_class %}{% endblock %}>项目组</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li>
|
||||
<a href="{{ SITE_ROOT }}groups/" {% block nav_group_class %}{% endblock %}>小组</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a href="{{ SITE_ROOT }}shareadmin/" {% block nav_shareadmin_class %}{% endblock %}>共享管理</a>
|
||||
</li>
|
||||
|
@@ -1,6 +0,0 @@
|
||||
<form id="group-add-form" action="" method="post" name="group-add-form" class="hide">
|
||||
<label>小组名称:</label><br />
|
||||
<input id="group_name" name="group_name" value="" /><br />
|
||||
<p class="error hide"></p>
|
||||
<input id="group-add-submit" type="submit" value="提交" />
|
||||
</form>
|
4
urls.py
4
urls.py
@@ -5,7 +5,7 @@ from django.views.generic.simple import direct_to_template
|
||||
from seahub.views import *
|
||||
from notifications.views import notification_list
|
||||
from share.views import share_admin
|
||||
from group.views import group_list
|
||||
from group.views import group_list, dept_group_list, proj_group_list
|
||||
|
||||
# Uncomment the next two lines to enable the admin:
|
||||
#from django.contrib import admin
|
||||
@@ -89,6 +89,8 @@ urlpatterns = patterns('',
|
||||
(r'^contacts/', include('contacts.urls')),
|
||||
(r'^group/', include('seahub.group.urls')),
|
||||
url(r'^groups/', group_list, name='group_list'),
|
||||
url(r'^deptgroups/', dept_group_list, name='dept_group_list'),
|
||||
url(r'^projgroups/', proj_group_list, name='proj_group_list'),
|
||||
(r'^organizations/', include('seahub.organizations.urls')),
|
||||
(r'^profile/', include('seahub.profile.urls')),
|
||||
|
||||
|
Reference in New Issue
Block a user