mirror of
https://github.com/haiwen/seahub.git
synced 2025-08-11 11:52:08 +00:00
Clean up shared repo listing code and add permission for public repos.
This commit is contained in:
parent
58efc80107
commit
d30f7c4bbb
@ -170,3 +170,12 @@ cc.spliter = ''
|
|||||||
def char2pinyin(value):
|
def char2pinyin(value):
|
||||||
"""Convert Chinese character to pinyin."""
|
"""Convert Chinese character to pinyin."""
|
||||||
return cc.convert(value)
|
return cc.convert(value)
|
||||||
|
|
||||||
|
@register.filter(name='translate_permission')
|
||||||
|
def translate_permission(value):
|
||||||
|
if value == 'rw':
|
||||||
|
return u'可读写'
|
||||||
|
elif value == 'r':
|
||||||
|
return u'只可浏览'
|
||||||
|
else:
|
||||||
|
return ''
|
||||||
|
5
forms.py
5
forms.py
@ -111,6 +111,11 @@ class RepoCreateForm(forms.Form):
|
|||||||
raise forms.ValidationError("两次输入的密码不一致")
|
raise forms.ValidationError("两次输入的密码不一致")
|
||||||
return self.cleaned_data
|
return self.cleaned_data
|
||||||
|
|
||||||
|
class SharedRepoCreateForm(RepoCreateForm):
|
||||||
|
"""
|
||||||
|
Used for creating group repo and public repo
|
||||||
|
"""
|
||||||
|
permission = forms.ChoiceField(choices=(('rw', 'read-write'), ('r', 'read-only')))
|
||||||
|
|
||||||
class RepoNewFileForm(forms.Form):
|
class RepoNewFileForm(forms.Form):
|
||||||
"""
|
"""
|
||||||
|
@ -68,7 +68,9 @@
|
|||||||
</td>
|
</td>
|
||||||
<td>{{ repo.owner|email2nickname }}</td>
|
<td>{{ repo.owner|email2nickname }}</td>
|
||||||
<td>
|
<td>
|
||||||
|
{% if repo.user_perm == 'rw' %}
|
||||||
<img src="{{ MEDIA_URL }}img/download-20.png" class="download op-icon vh" data="{{ SITE_ROOT }}seafile_access_check/?repo_id={{ repo.props.id }}" alt="下载" title="下载到本地" />
|
<img src="{{ MEDIA_URL }}img/download-20.png" class="download op-icon vh" data="{{ SITE_ROOT }}seafile_access_check/?repo_id={{ repo.props.id }}" alt="下载" title="下载到本地" />
|
||||||
|
{% endif %}
|
||||||
{% if is_staff or repo.share_from_me %}
|
{% if is_staff or repo.share_from_me %}
|
||||||
<img src="{{ MEDIA_URL }}img/delete-20.png" class="cancel-share op-icon vh" data="{{ SITE_ROOT }}shareadmin/removeshare/?repo_id={{ repo.props.id }}&from={{ repo.owner }}&gid={{ group.id }}" title="取消共享" alt="取消共享" />
|
<img src="{{ MEDIA_URL }}img/delete-20.png" class="cancel-share op-icon vh" data="{{ SITE_ROOT }}shareadmin/removeshare/?repo_id={{ repo.props.id }}&from={{ repo.owner }}&gid={{ group.id }}" title="取消共享" alt="取消共享" />
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -20,7 +20,7 @@ from seaserv import ccnet_rpc, ccnet_threaded_rpc, seafserv_threaded_rpc, \
|
|||||||
get_repo, get_group_repos, check_group_staff, get_commits, is_group_user, \
|
get_repo, get_group_repos, check_group_staff, get_commits, is_group_user, \
|
||||||
get_personal_groups_by_user, get_group, get_group_members, \
|
get_personal_groups_by_user, get_group, get_group_members, \
|
||||||
get_personal_groups, create_org_repo, get_org_group_repos, \
|
get_personal_groups, create_org_repo, get_org_group_repos, \
|
||||||
get_org_groups_by_user
|
get_org_groups_by_user, check_permission
|
||||||
from pysearpc import SearpcError
|
from pysearpc import SearpcError
|
||||||
|
|
||||||
from models import GroupMessage, MessageReply, MessageAttachment, BusinessGroup
|
from models import GroupMessage, MessageReply, MessageAttachment, BusinessGroup
|
||||||
@ -39,7 +39,7 @@ from seahub.utils import render_error, render_permission_error, \
|
|||||||
validate_group_name, string2list, check_and_get_org_by_group, \
|
validate_group_name, string2list, check_and_get_org_by_group, \
|
||||||
check_and_get_org_by_repo
|
check_and_get_org_by_repo
|
||||||
from seahub.views import is_registered_user
|
from seahub.views import is_registered_user
|
||||||
from seahub.forms import RepoCreateForm
|
from seahub.forms import RepoCreateForm, SharedRepoCreateForm
|
||||||
|
|
||||||
class GroupMixin(object):
|
class GroupMixin(object):
|
||||||
def get_username(self):
|
def get_username(self):
|
||||||
@ -287,6 +287,9 @@ def render_group_info(request, group_id, form):
|
|||||||
else:
|
else:
|
||||||
repos = get_group_repos(group_id_int, request.user.username)
|
repos = get_group_repos(group_id_int, request.user.username)
|
||||||
|
|
||||||
|
for repo in repos:
|
||||||
|
repo.user_perm = check_permission(repo.props.id, request.user.username)
|
||||||
|
|
||||||
"""group messages"""
|
"""group messages"""
|
||||||
# Make sure page request is an int. If not, deliver first page.
|
# Make sure page request is an int. If not, deliver first page.
|
||||||
try:
|
try:
|
||||||
@ -349,6 +352,7 @@ def render_group_info(request, group_id, form):
|
|||||||
'next_page': current_page+1,
|
'next_page': current_page+1,
|
||||||
'per_page': per_page,
|
'per_page': per_page,
|
||||||
'page_next': page_next,
|
'page_next': page_next,
|
||||||
|
'create_shared_repo': True,
|
||||||
}, context_instance=RequestContext(request));
|
}, context_instance=RequestContext(request));
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@ -732,12 +736,13 @@ def create_group_repo(request, group_id):
|
|||||||
if not is_group_user(group_id, request.user.username):
|
if not is_group_user(group_id, request.user.username):
|
||||||
return json_error(u"创建失败:未加入该群组")
|
return json_error(u"创建失败:未加入该群组")
|
||||||
|
|
||||||
form = RepoCreateForm(request.POST)
|
form = SharedRepoCreateForm(request.POST)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
return json_error(form.errors)
|
return json_error(form.errors)
|
||||||
else:
|
else:
|
||||||
repo_name = form.cleaned_data['repo_name']
|
repo_name = form.cleaned_data['repo_name']
|
||||||
repo_desc = form.cleaned_data['repo_desc']
|
repo_desc = form.cleaned_data['repo_desc']
|
||||||
|
permission = form.cleaned_data['permission']
|
||||||
encrypted = form.cleaned_data['encryption']
|
encrypted = form.cleaned_data['encryption']
|
||||||
passwd = form.cleaned_data['passwd']
|
passwd = form.cleaned_data['passwd']
|
||||||
user = request.user.username
|
user = request.user.username
|
||||||
@ -757,7 +762,8 @@ def create_group_repo(request, group_id):
|
|||||||
status = seafserv_threaded_rpc.add_org_group_repo(repo_id,
|
status = seafserv_threaded_rpc.add_org_group_repo(repo_id,
|
||||||
org.org_id,
|
org.org_id,
|
||||||
group_id,
|
group_id,
|
||||||
user, 'rw')
|
user,
|
||||||
|
permission)
|
||||||
except SearpcError, e:
|
except SearpcError, e:
|
||||||
status = -1
|
status = -1
|
||||||
|
|
||||||
@ -783,7 +789,8 @@ def create_group_repo(request, group_id):
|
|||||||
try:
|
try:
|
||||||
status = seafserv_threaded_rpc.group_share_repo(repo_id,
|
status = seafserv_threaded_rpc.group_share_repo(repo_id,
|
||||||
group_id,
|
group_id,
|
||||||
user, 'rw')
|
user,
|
||||||
|
permission)
|
||||||
except SearpcError, e:
|
except SearpcError, e:
|
||||||
status = -1
|
status = -1
|
||||||
|
|
||||||
|
@ -605,6 +605,11 @@ ul.with-bg li {
|
|||||||
#repo-desc {
|
#repo-desc {
|
||||||
height:70px;
|
height:70px;
|
||||||
}
|
}
|
||||||
|
#repo-create-form select[name="permission"] {
|
||||||
|
display:block;
|
||||||
|
width:262px;
|
||||||
|
margin-bottom:10px;
|
||||||
|
}
|
||||||
/* avatar */
|
/* avatar */
|
||||||
.avatar-op .avatar,
|
.avatar-op .avatar,
|
||||||
.home-profile .avatar,
|
.home-profile .avatar,
|
||||||
@ -875,8 +880,10 @@ ul.with-bg li {
|
|||||||
width:260px;
|
width:260px;
|
||||||
height:80px;
|
height:80px;
|
||||||
}
|
}
|
||||||
#share-permission {
|
#repo-share-form select[name="permission"] {
|
||||||
width:260px;
|
display:block;
|
||||||
|
width:262px;
|
||||||
|
margin:5px 0;
|
||||||
}
|
}
|
||||||
#recommend-msg,
|
#recommend-msg,
|
||||||
#recommend-groups {
|
#recommend-groups {
|
||||||
|
@ -33,17 +33,18 @@
|
|||||||
{% for repo in repos %}
|
{% for repo in repos %}
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="{{MEDIA_URL}}img/sync-folder-20.png" alt="目录icon" /></td>
|
<td><img src="{{MEDIA_URL}}img/sync-folder-20.png" alt="目录icon" /></td>
|
||||||
<td><a href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/">{{ repo.props.name }}</a></td>
|
<td><a href="{{ SITE_ROOT }}repo/{{ repo.props.repo_id }}/">{{ repo.props.repo_name }}</a></td>
|
||||||
<td>{{ repo.props.desc }}</td>
|
<td>{{ repo.props.repo_desc }}</td>
|
||||||
{% if repo.latest_modify %}
|
{% if repo.last_modified %}
|
||||||
<td>{{ repo.latest_modify|translate_commit_time }}</td>
|
<td>{{ repo.last_modified|translate_commit_time }}</td>
|
||||||
{% else %}
|
{% else %}
|
||||||
<td>--</td>
|
<td>--</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<td>{{ repo.owner|email2nickname }}</td>
|
<td>{{ repo.props.user|email2nickname }}</td>
|
||||||
<td>
|
<td>
|
||||||
<img src="{{ MEDIA_URL }}img/download-20.png" data="{{ repo.props.id }}" class="download-btn op-icon vh" title="下载到本地" alt="下载" />
|
{% if repo.user_perm == 'rw' %}
|
||||||
<img src="{{ MEDIA_URL }}img/delete-20.png" data="{% url 'unset_org_inner_pub_repo' org.url_prefix repo.id %}" class="unshare-btn op-icon vh" title="取消共享" alt="取消共享" />
|
<img src="{{ MEDIA_URL }}img/download-20.png" data="{{ repo.props.repo_id }}" class="download-btn op-icon vh" title="下载到本地" alt="下载" />
|
||||||
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -31,7 +31,7 @@ from share.forms import RepoShareForm
|
|||||||
from registration.models import RegistrationProfile
|
from registration.models import RegistrationProfile
|
||||||
from seahub.base.accounts import User
|
from seahub.base.accounts import User
|
||||||
from seahub.contacts import Contact
|
from seahub.contacts import Contact
|
||||||
from seahub.forms import RepoCreateForm
|
from seahub.forms import RepoCreateForm, SharedRepoCreateForm
|
||||||
import seahub.settings as seahub_settings
|
import seahub.settings as seahub_settings
|
||||||
from seahub.utils import render_error, render_permission_error, gen_token, \
|
from seahub.utils import render_error, render_permission_error, gen_token, \
|
||||||
validate_group_name, string2list, calculate_repo_last_modify, MAX_INT
|
validate_group_name, string2list, calculate_repo_last_modify, MAX_INT
|
||||||
@ -76,12 +76,13 @@ def org_info(request, url_prefix):
|
|||||||
return HttpResponseRedirect(reverse(myhome))
|
return HttpResponseRedirect(reverse(myhome))
|
||||||
|
|
||||||
org_members = get_org_users_by_url_prefix(url_prefix, 0, MAX_INT)
|
org_members = get_org_users_by_url_prefix(url_prefix, 0, MAX_INT)
|
||||||
repos = list_org_inner_pub_repos(org.org_id)
|
repos = list_org_inner_pub_repos(org.org_id, request.user.username)
|
||||||
|
|
||||||
return render_to_response('organizations/org_info.html', {
|
return render_to_response('organizations/org_info.html', {
|
||||||
'org': org,
|
'org': org,
|
||||||
'org_users': org_members,
|
'org_users': org_members,
|
||||||
'repos': repos,
|
'repos': repos,
|
||||||
|
'create_shared_repo': True,
|
||||||
}, context_instance=RequestContext(request))
|
}, context_instance=RequestContext(request))
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@ -102,7 +103,7 @@ def org_personal(request, url_prefix):
|
|||||||
owned_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
owned_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
||||||
|
|
||||||
# Org repos others shared to me
|
# Org repos others shared to me
|
||||||
in_repos = list_org_shared_repos(user,'to_email', -1, -1)
|
in_repos = list_org_shared_repos(org.org_id, user,'to_email', -1, -1)
|
||||||
|
|
||||||
# Org groups user created
|
# Org groups user created
|
||||||
groups = get_org_groups_by_user(org.org_id, user)
|
groups = get_org_groups_by_user(org.org_id, user)
|
||||||
@ -122,6 +123,8 @@ def org_personal(request, url_prefix):
|
|||||||
'org': org,
|
'org': org,
|
||||||
'groups': groups,
|
'groups': groups,
|
||||||
'contacts': contacts,
|
'contacts': contacts,
|
||||||
|
'create_shared_repo': False,
|
||||||
|
'allow_public_share': True,
|
||||||
}, context_instance=RequestContext(request))
|
}, context_instance=RequestContext(request))
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@ -136,10 +139,11 @@ def org_inner_pub_repo_create(request, url_prefix):
|
|||||||
result = {}
|
result = {}
|
||||||
content_type = 'application/json; charset=utf-8'
|
content_type = 'application/json; charset=utf-8'
|
||||||
|
|
||||||
form = RepoCreateForm(request.POST)
|
form = SharedRepoCreateForm(request.POST)
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
repo_name = form.cleaned_data['repo_name']
|
repo_name = form.cleaned_data['repo_name']
|
||||||
repo_desc = form.cleaned_data['repo_desc']
|
repo_desc = form.cleaned_data['repo_desc']
|
||||||
|
permission = form.cleaned_data['permission']
|
||||||
passwd = form.cleaned_data['passwd']
|
passwd = form.cleaned_data['passwd']
|
||||||
user = request.user.username
|
user = request.user.username
|
||||||
org = get_user_current_org(request.user.username, url_prefix)
|
org = get_user_current_org(request.user.username, url_prefix)
|
||||||
@ -152,7 +156,7 @@ def org_inner_pub_repo_create(request, url_prefix):
|
|||||||
repo_id = create_org_repo(repo_name, repo_desc, user, passwd,
|
repo_id = create_org_repo(repo_name, repo_desc, user, passwd,
|
||||||
org.org_id)
|
org.org_id)
|
||||||
# set org inner pub
|
# set org inner pub
|
||||||
seafserv_threaded_rpc.set_org_inner_pub_repo(org.org_id, repo_id)
|
seafserv_threaded_rpc.set_org_inner_pub_repo(org.org_id, repo_id, permission)
|
||||||
except:
|
except:
|
||||||
repo_id = None
|
repo_id = None
|
||||||
if not repo_id:
|
if not repo_id:
|
||||||
@ -175,7 +179,9 @@ def unset_org_inner_pub_repo(request, url_prefix, repo_id):
|
|||||||
except SearpcError:
|
except SearpcError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return HttpResponseRedirect(reverse(org_info, args=[url_prefix]))
|
messages.add_message(request, messages.INFO, '操作成功')
|
||||||
|
|
||||||
|
return HttpResponseRedirect(reverse(org_shareadmin, args=[url_prefix]))
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def org_groups(request, url_prefix):
|
def org_groups(request, url_prefix):
|
||||||
@ -505,6 +511,7 @@ def org_repo_share(request, url_prefix):
|
|||||||
|
|
||||||
email_or_group = form.cleaned_data['email_or_group']
|
email_or_group = form.cleaned_data['email_or_group']
|
||||||
repo_id = form.cleaned_data['repo_id']
|
repo_id = form.cleaned_data['repo_id']
|
||||||
|
permission = form.cleaned_data['permission']
|
||||||
from_email = request.user.username
|
from_email = request.user.username
|
||||||
|
|
||||||
# Test whether user is the repo owner
|
# Test whether user is the repo owner
|
||||||
@ -519,7 +526,21 @@ def org_repo_share(request, url_prefix):
|
|||||||
for share_to in share_to_list:
|
for share_to in share_to_list:
|
||||||
# if share_to is user name, the format is: 'example@mail.com';
|
# if share_to is user name, the format is: 'example@mail.com';
|
||||||
# if share_to is group, the format is 'group_name <creator@mail.com>'
|
# if share_to is group, the format is 'group_name <creator@mail.com>'
|
||||||
if (share_to.split(' ')[0].find('@') == -1):
|
if share_to == 'all':
|
||||||
|
''' Share to public '''
|
||||||
|
|
||||||
|
try:
|
||||||
|
seafserv_threaded_rpc.set_org_inner_pub_repo(org.org_id,
|
||||||
|
repo_id, permission)
|
||||||
|
except:
|
||||||
|
msg = u'共享到公共资料失败'
|
||||||
|
message.add_message(request, message.ERROR, msg)
|
||||||
|
continue
|
||||||
|
|
||||||
|
msg = u'共享公共资料成功,请前往<a href="%s">共享管理</a>查看。' % \
|
||||||
|
(reverse('org_shareadmin', args=[org.url_prefix]))
|
||||||
|
messages.add_message(request, messages.INFO, msg)
|
||||||
|
elif (share_to.split(' ')[0].find('@') == -1):
|
||||||
''' Share repo to group '''
|
''' Share repo to group '''
|
||||||
# TODO: if we know group id, then we can simplly call group_share_repo
|
# TODO: if we know group id, then we can simplly call group_share_repo
|
||||||
if len(share_to.split(' ')) < 2:
|
if len(share_to.split(' ')) < 2:
|
||||||
@ -541,7 +562,7 @@ def org_repo_share(request, url_prefix):
|
|||||||
org.org_id,
|
org.org_id,
|
||||||
group.id,
|
group.id,
|
||||||
from_email,
|
from_email,
|
||||||
'rw')
|
permission)
|
||||||
find = True
|
find = True
|
||||||
msg = u'共享到 %s 成功,请前往<a href="%s">共享管理</a>查看。' % \
|
msg = u'共享到 %s 成功,请前往<a href="%s">共享管理</a>查看。' % \
|
||||||
(group_name, reverse('org_shareadmin', args=[org.url_prefix]))
|
(group_name, reverse('org_shareadmin', args=[org.url_prefix]))
|
||||||
@ -562,7 +583,7 @@ def org_repo_share(request, url_prefix):
|
|||||||
# Record share info to db.
|
# Record share info to db.
|
||||||
try:
|
try:
|
||||||
seafserv_threaded_rpc.add_share(repo_id, from_email, share_to,
|
seafserv_threaded_rpc.add_share(repo_id, from_email, share_to,
|
||||||
'rw')
|
permission)
|
||||||
msg = u'共享给 %s 成功,请前往<a href="%s">共享管理</a>查看。' % \
|
msg = u'共享给 %s 成功,请前往<a href="%s">共享管理</a>查看。' % \
|
||||||
(share_to, reverse('org_shareadmin', args=[org.url_prefix]))
|
(share_to, reverse('org_shareadmin', args=[org.url_prefix]))
|
||||||
messages.add_message(request, messages.INFO, msg)
|
messages.add_message(request, messages.INFO, msg)
|
||||||
@ -585,37 +606,42 @@ def org_shareadmin(request, url_prefix):
|
|||||||
if not org:
|
if not org:
|
||||||
return HttpResponseRedirect(reverse(myhome))
|
return HttpResponseRedirect(reverse(myhome))
|
||||||
|
|
||||||
# Org repos that are shared to others.
|
shared_repos = []
|
||||||
out_repos = list_org_shared_repos(username, 'from_email', -1, -1)
|
|
||||||
|
|
||||||
# Org repos that are shared to groups.
|
# personal repos shared by this user
|
||||||
|
shared_repos += seafserv_threaded_rpc.list_org_share_repos(org.org_id,
|
||||||
|
username,
|
||||||
|
'from_email',
|
||||||
|
-1, -1)
|
||||||
|
|
||||||
|
# repos shared to groups
|
||||||
group_repos = seafserv_threaded_rpc.get_org_group_repos_by_owner(org.org_id,
|
group_repos = seafserv_threaded_rpc.get_org_group_repos_by_owner(org.org_id,
|
||||||
username)
|
username)
|
||||||
for group_repo in group_repos:
|
for repo in group_repos:
|
||||||
repo_id = group_repo.props.repo_id
|
group = ccnet_threaded_rpc.get_group(int(repo.group_id))
|
||||||
if not repo_id:
|
|
||||||
continue
|
|
||||||
repo = get_repo(repo_id)
|
|
||||||
if not repo:
|
|
||||||
continue
|
|
||||||
group_id = group_repo.props.group_id
|
|
||||||
group = ccnet_threaded_rpc.get_group(int(group_id))
|
|
||||||
if not group:
|
if not group:
|
||||||
|
repo.props.user = ''
|
||||||
continue
|
continue
|
||||||
repo.props.shared_email = group.props.group_name
|
repo.props.user = group.props.group_name
|
||||||
repo.props.share_permission = group_repo.props.permission
|
shared_repos += group_repos
|
||||||
repo.gid = group_id
|
|
||||||
|
|
||||||
out_repos.append(repo)
|
# public repos shared by this user
|
||||||
|
pub_repos = seafserv_threaded_rpc.list_org_inner_pub_repos_by_owner(org.org_id,
|
||||||
|
username)
|
||||||
|
for repo in pub_repos:
|
||||||
|
repo.props.user = '所有团体成员'
|
||||||
|
shared_repos += pub_repos
|
||||||
|
|
||||||
for repo in out_repos:
|
for repo in shared_repos:
|
||||||
if repo.props.share_permission == 'rw':
|
if repo.props.permission == 'rw':
|
||||||
repo.share_permission = '可读写'
|
repo.share_permission = '可读写'
|
||||||
elif repo.props.share_permission == 'r':
|
elif repo.props.permission == 'r':
|
||||||
repo.share_permission = '只可浏览'
|
repo.share_permission = '只可浏览'
|
||||||
else:
|
else:
|
||||||
repo.share_permission = ''
|
repo.share_permission = ''
|
||||||
|
|
||||||
|
shared_repos.sort(lambda x, y: cmp(x.repo_id, y.repo_id))
|
||||||
|
|
||||||
# File shared links
|
# File shared links
|
||||||
fileshares = FileShare.objects.filter(username=request.user.username)
|
fileshares = FileShare.objects.filter(username=request.user.username)
|
||||||
o_fileshares = [] # shared files in org repos
|
o_fileshares = [] # shared files in org repos
|
||||||
@ -630,7 +656,7 @@ def org_shareadmin(request, url_prefix):
|
|||||||
|
|
||||||
return render_to_response('repo/share_admin.html', {
|
return render_to_response('repo/share_admin.html', {
|
||||||
"org": org,
|
"org": org,
|
||||||
"out_repos": out_repos,
|
"shared_repos": shared_repos,
|
||||||
"fileshares": o_fileshares,
|
"fileshares": o_fileshares,
|
||||||
"protocol": request.is_secure() and 'https' or 'http',
|
"protocol": request.is_secure() and 'https' or 'http',
|
||||||
"domain": RequestSite(request).domain,
|
"domain": RequestSite(request).domain,
|
||||||
|
@ -5,28 +5,36 @@
|
|||||||
|
|
||||||
{% block right_panel %}
|
{% block right_panel %}
|
||||||
<h3>我共享的同步目录</h3>
|
<h3>我共享的同步目录</h3>
|
||||||
{% if out_repos %}
|
{% if shared_repos %}
|
||||||
<table class="repo-list">
|
<table class="repo-list">
|
||||||
<tr>
|
<tr>
|
||||||
<th width="5%"><!--icon--></th>
|
<th width="5%"><!--icon--></th>
|
||||||
<th width="20%">名字</th>
|
<th width="20%">名字</th>
|
||||||
<th width="25%">共享给</th>
|
<th width="25%">共享给</th>
|
||||||
<th width="10%">权限</th>
|
<th width="10%">权限</th>
|
||||||
<th width="37%">描述</th>
|
<th width="35%">描述</th>
|
||||||
<th width="8%">操作</th>
|
<th width="10%">操作</th>
|
||||||
</tr>
|
</tr>
|
||||||
{% for repo in out_repos %}
|
{% for repo in shared_repos %}
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="{{MEDIA_URL}}img/sync-folder-20.png" alt="目录icon" /></td>
|
<td><img src="{{MEDIA_URL}}img/sync-folder-20.png" alt="目录icon" /></td>
|
||||||
<td><a href="{{ SITE_ROOT }}repo/{{ repo.props.id }}">{{ repo.props.name }}</a></td>
|
<td><a href="{{ SITE_ROOT }}repo/{{ repo.props.repo_id }}">{{ repo.props.repo_name }}</a></td>
|
||||||
<td>{{ repo.props.shared_email }}</td>
|
<td>{{ repo.props.user }}</td>
|
||||||
<td>{{ repo.share_permission }}</td>
|
<td>{{ repo.share_permission }}</td>
|
||||||
<td>{{ repo.props.desc }}</td>
|
<td>{{ repo.props.repo_desc }}</td>
|
||||||
<td>
|
<td>
|
||||||
{% if repo.gid %}
|
{% if repo.props.share_type == 'group' %}
|
||||||
<a href="#" data="{{ SITE_ROOT }}shareadmin/removeshare/?repo_id={{ repo.props.id }}&from={{ request.user }}&gid={{ repo.gid }}" class="cancel-share op">删除</a>
|
<a href="#" data="{{ SITE_ROOT }}shareadmin/removeshare/?repo_id={{ repo.props.repo_id }}&from={{ request.user }}&gid={{ repo.props.group_id }}" class="cancel-share op">取消共享</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if repo.props.share_type == 'personal' %}
|
||||||
|
<a href="#" data="{{ SITE_ROOT }}shareadmin/removeshare/?repo_id={{ repo.props.repo_id }}&from={{ request.user }}&to={{ repo.props.user }}" class="cancel-share op">取消共享</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if repo.props.share_type == 'public' %}
|
||||||
|
{% if not org %}
|
||||||
|
<a href="#" data="{{ SITE_ROOT }}repo/unsetinnerpub/{{ repo.props.repo_id }}" class="cancel-share op">取消共享</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="#" data="{{ SITE_ROOT }}shareadmin/removeshare/?repo_id={{ repo.props.id }}&from={{ request.user }}&to={{ repo.props.shared_email }}" class="cancel-share op">删除</a>
|
<a href="#" data="{{ SITE_ROOT }}organizations/{{ org.url_prefix }}/innerpubrepo/unset/{{ repo.props.repo_id }}" class="cancel-share op">取消共享</a>
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -23,6 +23,11 @@ from seahub.share.models import FileShare
|
|||||||
from seahub.views import validate_owner, is_registered_user
|
from seahub.views import validate_owner, is_registered_user
|
||||||
from seahub.utils import render_permission_error, string2list
|
from seahub.utils import render_permission_error, string2list
|
||||||
|
|
||||||
|
try:
|
||||||
|
from seahub.settings import CLOUD_MODE
|
||||||
|
except ImportError:
|
||||||
|
CLOUD_MODE = False
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def share_repo(request):
|
def share_repo(request):
|
||||||
"""
|
"""
|
||||||
@ -53,7 +58,23 @@ def share_repo(request):
|
|||||||
|
|
||||||
to_email_list = string2list(email_or_group)
|
to_email_list = string2list(email_or_group)
|
||||||
for to_email in to_email_list:
|
for to_email in to_email_list:
|
||||||
if to_email.find('@') == -1:
|
if to_email == 'all':
|
||||||
|
''' Share to public '''
|
||||||
|
|
||||||
|
# ignore 'all' if we're running in cloud mode
|
||||||
|
if not CLOUD_MODE:
|
||||||
|
try:
|
||||||
|
seafserv_threaded_rpc.set_inner_pub_repo(repo_id, permission)
|
||||||
|
except:
|
||||||
|
msg = u'共享到公共资料失败'
|
||||||
|
message.add_message(request, message.ERROR, msg)
|
||||||
|
continue
|
||||||
|
|
||||||
|
msg = u'共享公共资料成功,请前往<a href="%s">共享管理</a>查看。' % \
|
||||||
|
(reverse('share_admin'))
|
||||||
|
messages.add_message(request, messages.INFO, msg)
|
||||||
|
|
||||||
|
elif to_email.find('@') == -1:
|
||||||
''' Share repo to group '''
|
''' Share repo to group '''
|
||||||
# TODO: if we know group id, then we can simplly call group_share_repo
|
# TODO: if we know group id, then we can simplly call group_share_repo
|
||||||
group_name = to_email
|
group_name = to_email
|
||||||
@ -114,36 +135,39 @@ def share_admin(request):
|
|||||||
"""
|
"""
|
||||||
username = request.user.username
|
username = request.user.username
|
||||||
|
|
||||||
# personal repos that are share to user
|
shared_repos = []
|
||||||
out_repos = list_personal_shared_repos(username, 'from_email', -1, -1)
|
|
||||||
|
|
||||||
# repos that are share to groups
|
# personal repos shared by this user
|
||||||
|
shared_repos += seafserv_threaded_rpc.list_share_repos(username, 'from_email',
|
||||||
|
-1, -1)
|
||||||
|
|
||||||
|
# repos shared to groups
|
||||||
group_repos = seafserv_threaded_rpc.get_group_repos_by_owner(username)
|
group_repos = seafserv_threaded_rpc.get_group_repos_by_owner(username)
|
||||||
for group_repo in group_repos:
|
for repo in group_repos:
|
||||||
repo_id = group_repo.props.repo_id
|
group = ccnet_threaded_rpc.get_group(int(repo.group_id))
|
||||||
if not repo_id:
|
|
||||||
continue
|
|
||||||
repo = get_repo(repo_id)
|
|
||||||
if not repo:
|
|
||||||
continue
|
|
||||||
group_id = group_repo.props.group_id
|
|
||||||
group = ccnet_threaded_rpc.get_group(int(group_id))
|
|
||||||
if not group:
|
if not group:
|
||||||
|
repo.props.user = ''
|
||||||
continue
|
continue
|
||||||
repo.props.shared_email = group.props.group_name
|
repo.props.user = group.props.group_name
|
||||||
repo.props.share_permission = group_repo.props.permission
|
shared_repos += group_repos
|
||||||
repo.gid = group_id
|
|
||||||
|
|
||||||
out_repos.append(repo)
|
if not CLOUD_MODE:
|
||||||
|
# public repos shared by this user
|
||||||
|
pub_repos = seafserv_threaded_rpc.list_inner_pub_repos_by_owner(username)
|
||||||
|
for repo in pub_repos:
|
||||||
|
repo.props.user = '所有人'
|
||||||
|
shared_repos += pub_repos
|
||||||
|
|
||||||
for repo in out_repos:
|
for repo in shared_repos:
|
||||||
if repo.props.share_permission == 'rw':
|
if repo.props.permission == 'rw':
|
||||||
repo.share_permission = '可读写'
|
repo.share_permission = '可读写'
|
||||||
elif repo.props.share_permission == 'r':
|
elif repo.props.permission == 'r':
|
||||||
repo.share_permission = '只可浏览'
|
repo.share_permission = '只可浏览'
|
||||||
else:
|
else:
|
||||||
repo.share_permission = ''
|
repo.share_permission = ''
|
||||||
|
|
||||||
|
shared_repos.sort(lambda x, y: cmp(x.repo_id, y.repo_id))
|
||||||
|
|
||||||
# Repo anonymous share links
|
# Repo anonymous share links
|
||||||
# out_links = AnonymousShare.objects.filter(repo_owner=request.user.username)
|
# out_links = AnonymousShare.objects.filter(repo_owner=request.user.username)
|
||||||
# for link in out_links:
|
# for link in out_links:
|
||||||
@ -162,7 +186,8 @@ def share_admin(request):
|
|||||||
p_fileshares.append(fs)
|
p_fileshares.append(fs)
|
||||||
|
|
||||||
return render_to_response('repo/share_admin.html', {
|
return render_to_response('repo/share_admin.html', {
|
||||||
"out_repos": out_repos,
|
"org": None,
|
||||||
|
"shared_repos": shared_repos,
|
||||||
# "out_links": out_links,
|
# "out_links": out_links,
|
||||||
"fileshares": p_fileshares,
|
"fileshares": p_fileshares,
|
||||||
"protocol": request.is_secure() and 'https' or 'http',
|
"protocol": request.is_secure() and 'https' or 'http',
|
||||||
|
@ -33,17 +33,18 @@
|
|||||||
{% for repo in public_repos %}
|
{% for repo in public_repos %}
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="{{MEDIA_URL}}img/sync-folder-20.png" alt="目录icon" /></td>
|
<td><img src="{{MEDIA_URL}}img/sync-folder-20.png" alt="目录icon" /></td>
|
||||||
<td><a href="{% url 'repo' repo.id %}">{{ repo.props.name }}</a></td>
|
<td><a href="{% url 'repo' repo.props.repo_id %}">{{ repo.props.repo_name }}</a></td>
|
||||||
<td>{{ repo.props.desc }}</td>
|
<td>{{ repo.props.repo_desc }}</td>
|
||||||
{% if repo.latest_modify %}
|
{% if repo.props.last_modified %}
|
||||||
<td>{{ repo.latest_modify|translate_commit_time }}</td>
|
<td>{{ repo.props.last_modified|translate_commit_time }}</td>
|
||||||
{% else %}
|
{% else %}
|
||||||
<td>--</td>
|
<td>--</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<td>{{ repo.owner|email2nickname }}</td>
|
<td>{{ repo.props.user|email2nickname }}</td>
|
||||||
<td>
|
<td>
|
||||||
<img src="{{ MEDIA_URL }}img/download-20.png" data="{{ repo.props.id }}" class="download-btn op-icon vh" title="下载到本地" alt="下载" />
|
{% if repo.user_perm == 'rw' %}
|
||||||
<img src="{{ MEDIA_URL }}img/delete-20.png" data="{% url 'views.unset_inner_pub_repo' repo.id %}" class="unshare-btn op-icon vh" title="取消共享" alt="取消共享" />
|
<img src="{{ MEDIA_URL }}img/download-20.png" data="{{ repo.props.repo_id }}" class="download-btn op-icon vh" title="下载到本地" alt="下载" />
|
||||||
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -4,6 +4,13 @@
|
|||||||
<input id="repo-name" type="text" name="repo_name" value="" /><br />
|
<input id="repo-name" type="text" name="repo_name" value="" /><br />
|
||||||
<label>描述:</label><br/>
|
<label>描述:</label><br/>
|
||||||
<textarea id="repo-desc" name="repo_desc"></textarea>
|
<textarea id="repo-desc" name="repo_desc"></textarea>
|
||||||
|
{% if create_shared_repo %}
|
||||||
|
<label style="display:block">共享权限:</label>
|
||||||
|
<select name="permission">
|
||||||
|
<option value="rw" selected="selected">可读写</option>
|
||||||
|
<option value="r">只可浏览</option>
|
||||||
|
</select>
|
||||||
|
{% endif %}
|
||||||
<div class="repo-create-encryption">
|
<div class="repo-create-encryption">
|
||||||
<input type="checkbox" name="encryption" id="encrypt-switch" /><label>加密</label><br />
|
<input type="checkbox" name="encryption" id="encrypt-switch" /><label>加密</label><br />
|
||||||
<label>密码:</label><span class="tip">(3到15个字符)</span><br />
|
<label>密码:</label><span class="tip">(3到15个字符)</span><br />
|
||||||
|
@ -31,6 +31,9 @@ $('#repo-create-submit').click(function() {
|
|||||||
data: {
|
data: {
|
||||||
'repo_name': $('#repo-name').val(),
|
'repo_name': $('#repo-name').val(),
|
||||||
'repo_desc': $('#repo-desc').val(),
|
'repo_desc': $('#repo-desc').val(),
|
||||||
|
{% if create_shared_repo %}
|
||||||
|
'permission': $('#repo-create-form select[name="permission"]').val(),
|
||||||
|
{% endif %}
|
||||||
'encryption': $('#encrypt-switch').attr('checked') ? 1 : 0,
|
'encryption': $('#encrypt-switch').attr('checked') ? 1 : 0,
|
||||||
'passwd': passwd.val(),
|
'passwd': passwd.val(),
|
||||||
'passwd_again': passwd_again.val()
|
'passwd_again': passwd_again.val()
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
<form id="repo-share-form" action="{{ post_url }}" method="post" name="repo-share-form" class="hide">
|
<form id="repo-share-form" action="{{ post_url }}" method="post" name="repo-share-form" class="hide">
|
||||||
|
{% if allow_public_share %}
|
||||||
|
<label>邮箱或群组,输入 all 共享到公共资料:</label><br />
|
||||||
|
{% else %}
|
||||||
<label>邮箱或群组:</label><br />
|
<label>邮箱或群组:</label><br />
|
||||||
|
{% endif %}
|
||||||
<textarea id="email_or_group" name="email_or_group"></textarea>
|
<textarea id="email_or_group" name="email_or_group"></textarea>
|
||||||
<div>
|
<select name="permission">
|
||||||
<select id="share-permission" name="permission">
|
|
||||||
<option value="rw" selected="selected">可读写</option>
|
<option value="rw" selected="selected">可读写</option>
|
||||||
<option value="r">只可浏览</option>
|
<option value="r">只可浏览</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
|
||||||
<input id="repo_id" type="hidden" name="repo_id" value="" />
|
<input id="repo_id" type="hidden" name="repo_id" value="" />
|
||||||
<p class="tip">{{ tips }}</p>
|
<p class="tip">{{ tips }}</p>
|
||||||
<p class="error hide"></p>
|
<p class="error hide"></p>
|
||||||
|
@ -14,17 +14,19 @@
|
|||||||
{% for repo in in_repos %}
|
{% for repo in in_repos %}
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="{{MEDIA_URL}}img/sync-folder-20.png" alt="目录icon" /></td>
|
<td><img src="{{MEDIA_URL}}img/sync-folder-20.png" alt="目录icon" /></td>
|
||||||
<td><a href="{{ SITE_ROOT }}repo/{{ repo.props.id }}">{{ repo.props.name }}</a></td>
|
<td><a href="{{ SITE_ROOT }}repo/{{ repo.props.repo_id }}">{{ repo.props.repo_name }}</a></td>
|
||||||
<td>{{ repo.props.desc }}</td>
|
<td>{{ repo.props.repo_desc }}</td>
|
||||||
{% if repo.latest_modify %}
|
{% if repo.props.last_modified %}
|
||||||
<td>{{ repo.latest_modify|translate_commit_time }}</td>
|
<td>{{ repo.props.last_modified|translate_commit_time }}</td>
|
||||||
{% else %}
|
{% else %}
|
||||||
<td>--</td>
|
<td>--</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<td>{{ repo.props.shared_email|email2nickname }}</td>
|
<td>{{ repo.props.user|email2nickname }}</td>
|
||||||
<td>
|
<td>
|
||||||
<img src="{{ MEDIA_URL }}img/download-20.png" data="{{ repo.props.id }}" class="download-btn op-icon vh" title="下载到本地" alt="下载" />
|
{% if repo.user_perm == 'rw' %}
|
||||||
<img src="{{ MEDIA_URL }}img/delete-20.png" data="{{ SITE_ROOT }}shareadmin/removeshare/?repo_id={{ repo.id }}&from={{ repo.shared_email }}&to={{ request.user }}" class="unshare-btn op-icon vh" title="取消共享" alt="取消共享" />
|
<img src="{{ MEDIA_URL }}img/download-20.png" data="{{ repo.props.repo_id }}" class="download-btn op-icon vh" title="下载到本地" alt="下载" />
|
||||||
|
{% endif %}
|
||||||
|
<img src="{{ MEDIA_URL }}img/delete-20.png" data="{{ SITE_ROOT }}shareadmin/removeshare/?repo_id={{ repo.props.repo_id }}&from={{ repo.props.user }}&to={{ request.user }}" class="unshare-btn op-icon vh" title="取消共享" alt="取消共享" />
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -521,21 +521,22 @@ def get_org_groups_by_repo(org_id, repo_id):
|
|||||||
return groups
|
return groups
|
||||||
|
|
||||||
# inner pub repo
|
# inner pub repo
|
||||||
def list_inner_pub_repos():
|
def list_inner_pub_repos(username):
|
||||||
"""
|
"""
|
||||||
List inner pub repos, which can be access by everyone.
|
List inner pub repos, which can be access by everyone.
|
||||||
"""
|
"""
|
||||||
inner_pub_repos = seafserv_threaded_rpc.list_inner_pub_repos()
|
|
||||||
for repo in inner_pub_repos:
|
|
||||||
repo.owner = seafserv_threaded_rpc.get_repo_owner(repo.id)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
repo.latest_modify = get_commits(repo.id, 0, 1)[0].ctime
|
shared_repos = seafserv_threaded_rpc.list_inner_pub_repos()
|
||||||
except:
|
except:
|
||||||
repo.latest_modify = None
|
shared_repos = []
|
||||||
|
|
||||||
inner_pub_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
for repo in shared_repos:
|
||||||
return inner_pub_repos
|
perm = seafserv_threaded_rpc.check_permission(repo.props.repo_id,
|
||||||
|
username)
|
||||||
|
repo.user_perm = perm
|
||||||
|
|
||||||
|
shared_repos.sort(lambda x, y: cmp(y.props.last_modified, x.props.last_modified))
|
||||||
|
return shared_repos
|
||||||
|
|
||||||
def is_inner_pub_repo(repo_id):
|
def is_inner_pub_repo(repo_id):
|
||||||
"""
|
"""
|
||||||
@ -550,25 +551,23 @@ def is_inner_pub_repo(repo_id):
|
|||||||
return ret
|
return ret
|
||||||
|
|
||||||
# org inner pub repo
|
# org inner pub repo
|
||||||
def list_org_inner_pub_repos(org_id, start=None, limit=None):
|
def list_org_inner_pub_repos(org_id, username, start=None, limit=None):
|
||||||
"""
|
"""
|
||||||
List org inner pub repos, which can be access by all org members.
|
List org inner pub repos, which can be access by all org members.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
repos = seafserv_threaded_rpc.list_org_inner_pub_repos(org_id)
|
shared_repos = seafserv_threaded_rpc.list_org_inner_pub_repos(org_id)
|
||||||
except SearpcError:
|
except SearpcError:
|
||||||
repos = []
|
shared_repos = []
|
||||||
|
|
||||||
# calculate repo's lastest modify time
|
for repo in shared_repos:
|
||||||
for repo in repos:
|
perm = seafserv_threaded_rpc.check_permission(repo.props.repo_id,
|
||||||
repo.owner = seafserv_threaded_rpc.get_org_repo_owner(repo.id)
|
username)
|
||||||
try:
|
repo.user_perm = perm
|
||||||
repo.latest_modify = get_commits(repo.id, 0, 1)[0].ctime
|
|
||||||
except:
|
# sort repos by last modify time
|
||||||
repo.latest_modify = None
|
shared_repos.sort(lambda x, y: cmp(y.props.last_modified, x.props.last_modified))
|
||||||
# sort repos by latest modify time
|
return shared_repos
|
||||||
repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
|
||||||
return repos
|
|
||||||
|
|
||||||
# repo permissoin
|
# repo permissoin
|
||||||
def check_permission(repo_id, user):
|
def check_permission(repo_id, user):
|
||||||
@ -606,48 +605,35 @@ def list_personal_shared_repos(user, user_type, start, limit):
|
|||||||
If `user_type` is 'to_email', list repos others sahre to user.
|
If `user_type` is 'to_email', list repos others sahre to user.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
repos = seafserv_threaded_rpc.list_share_repos(user, user_type,
|
share_repos = seafserv_threaded_rpc.list_share_repos(user, user_type,
|
||||||
start, limit)
|
start, limit)
|
||||||
except SearpcError:
|
except SearpcError:
|
||||||
repos = []
|
share_repos = []
|
||||||
|
|
||||||
p_repos = []
|
for repo in share_repos:
|
||||||
if repos:
|
repo.user_perm = check_permission(repo.props.repo_id, user)
|
||||||
for r in repos:
|
|
||||||
if is_personal_repo(r.id):
|
|
||||||
try:
|
|
||||||
r.latest_modify = get_commits(r.id, 0, 1)[0].ctime
|
|
||||||
except:
|
|
||||||
r.latest_modify = None
|
|
||||||
p_repos.append(r)
|
|
||||||
|
|
||||||
p_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
share_repos.sort(lambda x, y: cmp(y.last_modified, x.last_modified))
|
||||||
return p_repos
|
return share_repos
|
||||||
|
|
||||||
def list_org_shared_repos(user, user_type, start, limit):
|
def list_org_shared_repos(org_id, user, user_type, start, limit):
|
||||||
"""
|
"""
|
||||||
List org repos that user share with others.
|
List org repos that user share with others.
|
||||||
If `user_type` is 'from_email', list repos user shares to others;
|
If `user_type` is 'from_email', list repos user shares to others;
|
||||||
If `user_type` is 'to_email', list repos others sahre to user.
|
If `user_type` is 'to_email', list repos others sahre to user.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
repos = seafserv_threaded_rpc.list_share_repos(user, user_type,
|
share_repos = seafserv_threaded_rpc.list_org_share_repos(org_id,
|
||||||
|
user, user_type,
|
||||||
start, limit)
|
start, limit)
|
||||||
except SearpcError:
|
except SearpcError:
|
||||||
repos = []
|
share_repos = []
|
||||||
|
|
||||||
o_repos = []
|
for repo in share_repos:
|
||||||
if repos:
|
repo.user_perm = check_permission(repo.props.repo_id, user)
|
||||||
for r in repos:
|
|
||||||
if not is_personal_repo(r.id):
|
|
||||||
try:
|
|
||||||
r.latest_modify = get_commits(r.id, 0, 1)[0].ctime
|
|
||||||
except:
|
|
||||||
r.latest_modify = None
|
|
||||||
o_repos.append(r)
|
|
||||||
|
|
||||||
o_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
share_repos.sort(lambda x, y: cmp(y.last_modified, x.last_modified))
|
||||||
return o_repos
|
return share_repos
|
||||||
|
|
||||||
def is_valid_filename(file_or_dir):
|
def is_valid_filename(file_or_dir):
|
||||||
"""
|
"""
|
||||||
|
26
views.py
26
views.py
@ -55,7 +55,7 @@ from notifications.models import UserNotification
|
|||||||
from profile.models import Profile
|
from profile.models import Profile
|
||||||
from forms import AddUserForm, FileLinkShareForm, RepoCreateForm, \
|
from forms import AddUserForm, FileLinkShareForm, RepoCreateForm, \
|
||||||
RepoNewDirForm, RepoNewFileForm, FileCommentForm, RepoRenameFileForm, \
|
RepoNewDirForm, RepoNewFileForm, FileCommentForm, RepoRenameFileForm, \
|
||||||
RepoPassowrdForm
|
RepoPassowrdForm, SharedRepoCreateForm
|
||||||
from utils import render_permission_error, render_error, list_to_string, \
|
from utils import render_permission_error, render_error, list_to_string, \
|
||||||
get_httpserver_root, get_ccnetapplet_root, gen_token, \
|
get_httpserver_root, get_ccnetapplet_root, gen_token, \
|
||||||
calculate_repo_last_modify, valid_previewed_file, \
|
calculate_repo_last_modify, valid_previewed_file, \
|
||||||
@ -790,6 +790,13 @@ def myhome(request):
|
|||||||
profile = Profile.objects.filter(user=request.user.username)[0]
|
profile = Profile.objects.filter(user=request.user.username)[0]
|
||||||
nickname = profile.nickname
|
nickname = profile.nickname
|
||||||
|
|
||||||
|
try:
|
||||||
|
from settings import CLOUD_MODE
|
||||||
|
except:
|
||||||
|
CLOUD_MODE = False
|
||||||
|
|
||||||
|
allow_public_share = True if not CLOUD_MODE else False
|
||||||
|
|
||||||
return render_to_response('myhome.html', {
|
return render_to_response('myhome.html', {
|
||||||
"myname": email,
|
"myname": email,
|
||||||
"nickname": nickname,
|
"nickname": nickname,
|
||||||
@ -803,6 +810,8 @@ def myhome(request):
|
|||||||
"grpmsg_list": grpmsg_list,
|
"grpmsg_list": grpmsg_list,
|
||||||
"grpmsg_reply_list": grpmsg_reply_list,
|
"grpmsg_reply_list": grpmsg_reply_list,
|
||||||
"orgmsg_list": orgmsg_list,
|
"orgmsg_list": orgmsg_list,
|
||||||
|
"create_shared_repo": False,
|
||||||
|
"allow_public_share": allow_public_share,
|
||||||
}, context_instance=RequestContext(request))
|
}, context_instance=RequestContext(request))
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@ -824,7 +833,7 @@ def public_home(request):
|
|||||||
# form = MessageForm()
|
# form = MessageForm()
|
||||||
|
|
||||||
users = get_emailusers(-1, -1)
|
users = get_emailusers(-1, -1)
|
||||||
public_repos = list_inner_pub_repos()
|
public_repos = list_inner_pub_repos(request.user.username)
|
||||||
|
|
||||||
# """inner pub messages"""
|
# """inner pub messages"""
|
||||||
# # Make sure page request is an int. If not, deliver first page.
|
# # Make sure page request is an int. If not, deliver first page.
|
||||||
@ -855,6 +864,7 @@ def public_home(request):
|
|||||||
return render_to_response('public_home.html', {
|
return render_to_response('public_home.html', {
|
||||||
'users': users,
|
'users': users,
|
||||||
'public_repos': public_repos,
|
'public_repos': public_repos,
|
||||||
|
'create_shared_repo': True,
|
||||||
# 'form': form,
|
# 'form': form,
|
||||||
# 'innerpub_msgs': innerpub_msgs,
|
# 'innerpub_msgs': innerpub_msgs,
|
||||||
# 'current_page': current_page,
|
# 'current_page': current_page,
|
||||||
@ -943,19 +953,22 @@ def public_repo_create(request):
|
|||||||
result = {}
|
result = {}
|
||||||
content_type = 'application/json; charset=utf-8'
|
content_type = 'application/json; charset=utf-8'
|
||||||
|
|
||||||
form = RepoCreateForm(request.POST)
|
form = SharedRepoCreateForm(request.POST)
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
repo_name = form.cleaned_data['repo_name']
|
repo_name = form.cleaned_data['repo_name']
|
||||||
repo_desc = form.cleaned_data['repo_desc']
|
repo_desc = form.cleaned_data['repo_desc']
|
||||||
|
permission = form.cleaned_data['permission']
|
||||||
passwd = form.cleaned_data['passwd']
|
passwd = form.cleaned_data['passwd']
|
||||||
user = request.user.username
|
user = request.user.username
|
||||||
|
|
||||||
|
print permission
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# create a repo
|
# create a repo
|
||||||
repo_id = seafserv_threaded_rpc.create_repo(repo_name, repo_desc,
|
repo_id = seafserv_threaded_rpc.create_repo(repo_name, repo_desc,
|
||||||
user, passwd)
|
user, passwd)
|
||||||
# set this repo as inner pub
|
# set this repo as inner pub
|
||||||
seafserv_threaded_rpc.set_inner_pub_repo(repo_id)
|
seafserv_threaded_rpc.set_inner_pub_repo(repo_id, permission)
|
||||||
except:
|
except:
|
||||||
repo_id = None
|
repo_id = None
|
||||||
if not repo_id:
|
if not repo_id:
|
||||||
@ -973,7 +986,10 @@ def unset_inner_pub_repo(request, repo_id):
|
|||||||
seafserv_threaded_rpc.unset_inner_pub_repo(repo_id)
|
seafserv_threaded_rpc.unset_inner_pub_repo(repo_id)
|
||||||
except SearpcError:
|
except SearpcError:
|
||||||
pass
|
pass
|
||||||
return HttpResponseRedirect(reverse('public_home'))
|
|
||||||
|
messages.add_message(request, messages.INFO, '操作成功')
|
||||||
|
|
||||||
|
return HttpResponseRedirect(reverse('share_admin'))
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def ownerhome(request, owner_name):
|
def ownerhome(request, owner_name):
|
||||||
|
Loading…
Reference in New Issue
Block a user