1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-02 15:38:15 +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 These are referenced from the setting TEMPLATE_CONTEXT_PROCESSORS and used by
RequestContext. RequestContext.
""" """
from settings import SEAFILE_VERSION from settings import SEAFILE_VERSION, SEAHUB_TITLE, BUSINESS_MODE
from settings import SEAHUB_TITLE
def base(request): def base(request):
""" """
@@ -25,6 +24,7 @@ def base(request):
return { return {
'seafile_version': SEAFILE_VERSION, 'seafile_version': SEAFILE_VERSION,
'seahub_title': SEAHUB_TITLE, 'seahub_title': SEAHUB_TITLE,
'business_mode': BUSINESS_MODE,
'cloud_mode': request.cloud_mode, 'cloud_mode': request.cloud_mode,
'org': org, 'org': org,
'base_template': base_template, 'base_template': base_template,

View File

@@ -33,6 +33,17 @@ class MessageAttachment(models.Model):
path = models.TextField() path = models.TextField()
src = models.CharField(max_length=20) # `recommend` or `filecomment` 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) at_pattern = re.compile(r'(\s|^)(@\w+)', flags=re.U)
@receiver(post_save, sender=MessageReply) @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" %} {% extends "myhome_base.html" %}
{% load seahub_tags group_avatar_tags %}
{% load url from future %} {% load url from future %}
{% block nav_group_class %}class="cur"{% endblock %} {% block nav_group_class %}class="cur"{% endblock %}
{% block left_panel %} {% block left_panel %}
<h3>操作</h3> <!-- 操作 -->
<ul class="with-bg"> {% include "group/groups_left_panel.html" %}
<li><a id="group-add" href="#">添加小组</a></li>
</ul>
{% endblock %} {% endblock %}
{% block right_panel %} {% block right_panel %}
<!-- 我的小组 -->
<h3>我的小组</h3> {% include "group/groups_right_panel.html" %}
{% 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" %}
{% endblock %} {% endblock %}
{% block extra_script %} {% 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 get_org_group_repos, get_org_groups_by_user
from pysearpc import SearpcError from pysearpc import SearpcError
from models import GroupMessage, MessageReply, MessageAttachment from models import GroupMessage, MessageReply, MessageAttachment, BusinessGroup
from forms import MessageForm, MessageReplyForm, GroupRecommendForm from forms import MessageForm, MessageReplyForm, GroupRecommendForm
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
@@ -36,7 +36,6 @@ from seahub.forms import RepoCreateForm
@login_required @login_required
def group_list(request): def group_list(request):
error_msg = None
if request.method == 'POST': if request.method == 'POST':
""" """
Add new group. Add new group.
@@ -64,6 +63,90 @@ def group_list(request):
"groups": groups, "groups": groups,
}, context_instance=RequestContext(request)) }, 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 @login_required
def group_remove(request, group_id): def group_remove(request, group_id):
""" """

View File

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

View File

@@ -1,4 +1,5 @@
{% extends "base.html" %} {% extends "base.html" %}
{% load url from future %}
{% block top_bar_myaccount_class %} class="cur"{% endblock %} {% block top_bar_myaccount_class %} class="cur"{% endblock %}
{% block nav %} {% block nav %}
<ul class="nav"> <ul class="nav">
@@ -7,12 +8,21 @@
</li> </li>
{% if not request.cloud_mode %} {% if not request.cloud_mode %}
<li> <li>
<a href="{% url public_home %}" {% block nav_publichome_class %}{% endblock %}>公共页面</a> <a href="{% url 'public_home' %}" {% block nav_publichome_class %}{% endblock %}>公共页面</a>
</li> </li>
{% endif %} {% 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> <li>
<a href="{{ SITE_ROOT }}groups/" {% block nav_group_class %}{% endblock %}>小组</a> <a href="{{ SITE_ROOT }}groups/" {% block nav_group_class %}{% endblock %}>小组</a>
</li> </li>
{% endif %}
<li> <li>
<a href="{{ SITE_ROOT }}shareadmin/" {% block nav_shareadmin_class %}{% endblock %}>共享管理</a> <a href="{{ SITE_ROOT }}shareadmin/" {% block nav_shareadmin_class %}{% endblock %}>共享管理</a>
</li> </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 seahub.views import *
from notifications.views import notification_list from notifications.views import notification_list
from share.views import share_admin 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: # Uncomment the next two lines to enable the admin:
#from django.contrib import admin #from django.contrib import admin
@@ -89,6 +89,8 @@ urlpatterns = patterns('',
(r'^contacts/', include('contacts.urls')), (r'^contacts/', include('contacts.urls')),
(r'^group/', include('seahub.group.urls')), (r'^group/', include('seahub.group.urls')),
url(r'^groups/', group_list, name='group_list'), 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'^organizations/', include('seahub.organizations.urls')),
(r'^profile/', include('seahub.profile.urls')), (r'^profile/', include('seahub.profile.urls')),