1
0
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:
xiez
2012-09-17 21:38:54 +08:00
parent ce04e5cb47
commit 00460468cb
12 changed files with 208 additions and 43 deletions

View File

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

View File

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

View 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 %}

View File

@@ -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 %}

View File

@@ -0,0 +1,4 @@
<h3>操作</h3>
<ul class="with-bg">
<li><a id="group-add" href="#">添加小组</a></li>
</ul>

View 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>

View 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 %}

View File

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

View File

@@ -202,6 +202,8 @@ SEAHUB_TITLE = 'SeaHub'
USE_SUBDOMAIN = False
BUSINESS_MODE = True
try:
import local_settings
except ImportError:

View File

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

View File

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

View File

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