1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-01 15:09:14 +00:00

list all wikis (#2095)

* [wiki] Update list wikis

* [wikis] show wiki owner
This commit is contained in:
llj
2018-05-04 16:20:01 +08:00
committed by xiez
parent 2f5fff9b80
commit 862192514c
5 changed files with 91 additions and 6 deletions

View File

@@ -20,7 +20,7 @@ from seahub.api2.throttling import UserRateThrottle
from seahub.api2.utils import api_error
from seahub.wiki.models import Wiki, DuplicateWikiNameError
from seahub.wiki.utils import is_valid_wiki_name
from seahub.utils import is_org_context
from seahub.utils import is_org_context, get_user_repos
logger = logging.getLogger(__name__)
@@ -33,8 +33,43 @@ class WikisView(APIView):
def get(self, request, format=None):
"""List all wikis.
"""
# parse request params
filter_by = {
'mine': False,
'shared': False,
'group': False,
'org': False,
}
rtype = request.GET.get('type', "")
if not rtype:
# set all to True, no filter applied
filter_by = filter_by.fromkeys(filter_by.iterkeys(), True)
for f in rtype.split(','):
f = f.strip()
filter_by[f] = True
username = request.user.username
ret = [x.to_dict() for x in Wiki.objects.filter(username=username)]
org_id = request.user.org.org_id if is_org_context(request) else None
(owned, shared, groups, public) = get_user_repos(username, org_id)
filter_repo_ids = []
if filter_by['mine']:
filter_repo_ids += ([r.id for r in owned])
if filter_by['shared']:
filter_repo_ids += ([r.id for r in shared])
if filter_by['group']:
filter_repo_ids += ([r.id for r in groups])
if filter_by['org']:
filter_repo_ids += ([r.id for r in public])
filter_repo_ids = list(set(filter_repo_ids))
ret = [x.to_dict() for x in Wiki.objects.filter(
repo_id__in=filter_repo_ids)]
return Response({'data': ret})

View File

@@ -16,9 +16,10 @@
<thead>
<tr>
<td width="30%">{% trans "Name" %}</td>
<td width="20%">{% trans "Permission" %}</td>
<td width="20%">{% trans "Created At" %}</td>
<td width="20%">{% trans "Last Update" %}</td>
<td width="15%">{% trans "Permission" %}</td>
<td width="15%">{% trans "Owner" %}</td>
<td width="15%">{% trans "Created At" %}</td>
<td width="15%">{% trans "Last Update" %}</td>
<td width="10%"><!-- operation --></td>
</tr>
</thead>
@@ -56,6 +57,7 @@
<option value="public" <% if (permission == 'public') { %>selected="selected"<% } %>>{% trans "public" %}</option>
</select>
</td>
<td><a href="<%= owner_profile_url %>"><%- owner_nickname %></a></td>
<td title="<%= create_time %>"><%= create_time_from_now %></td>
<td title="<%= update_time %>"><%= update_time_from_now %></td>
<td>
@@ -231,6 +233,7 @@ var wiki = {
var update_at_m = moment(obj.updated_at);
var data = $.extend({}, obj, {
'permission_text': getPermText(obj.permission),
'owner_profile_url': '{{SITE_ROOT}}profile/' + encodeURIComponent(obj.owner) + '/',
'create_time': create_at_m.format('LLLL'),
'create_time_from_now': this.util_getRelativeTimeStr(create_at_m),
'update_time': update_at_m.format('LLLL'),

View File

@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.11 on 2018-04-28 06:19
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('wiki', '0002_auto_20180326_0548'),
]
operations = [
migrations.AlterField(
model_name='wiki',
name='repo_id',
field=models.CharField(db_index=True, max_length=36),
),
]

View File

@@ -6,6 +6,7 @@ from django.utils.translation import ugettext_lazy as _
from seaserv import seafile_api
from seahub.base.fields import LowerCaseCharField
from seahub.base.templatetags.seahub_tags import email2nickname
from seahub.utils import get_site_scheme_and_netloc
from seahub.utils.timeutils import (timestamp_to_isoformat_timestr,
datetime_to_isoformat_timestr)
@@ -101,7 +102,7 @@ class Wiki(models.Model):
username = LowerCaseCharField(max_length=255)
name = models.CharField(max_length=255)
slug = models.CharField(max_length=255, unique=True)
repo_id = models.CharField(max_length=36)
repo_id = models.CharField(max_length=36, db_index=True)
permission = models.CharField(max_length=50) # private, public, login
created_at = models.DateTimeField(default=timezone.now, db_index=True)
objects = WikiManager()
@@ -136,6 +137,8 @@ class Wiki(models.Model):
def to_dict(self):
return {
'id': self.pk,
'owner': self.username,
'owner_nickname': email2nickname(self.username),
'name': self.name,
'slug': self.slug,
'link': self.link,

View File

@@ -4,6 +4,7 @@ from django.core.urlresolvers import reverse
import seaserv
from seaserv import seafile_api, ccnet_api
from seahub.share.utils import share_dir_to_user
from seahub.wiki.models import Wiki
from seahub.test_utils import BaseTestCase
@@ -29,6 +30,29 @@ class WikisViewTest(BaseTestCase):
assert len(json_resp['data']) == 1
assert json_resp['data'][0]['name'] == wiki.name
assert 'wikis/test-wiki' in json_resp['data'][0]['link']
assert json_resp['data'][0]['owner'] == self.user.username
def test_can_list_others(self):
self.logout()
self.login_as(self.admin)
resp = self.client.get(self.url)
self.assertEqual(200, resp.status_code)
json_resp = json.loads(resp.content)
assert len(json_resp['data']) == 0
share_from = self.user.username
share_to = self.admin.username
share_dir_to_user(self.repo, '/', share_from, share_from, share_to, 'r')
wiki = Wiki.objects.add('test wiki', self.user.username,
repo_id=self.repo.id)
resp = self.client.get(self.url)
json_resp = json.loads(resp.content)
assert len(json_resp['data']) == 1
assert json_resp['data'][0]['name'] == wiki.name
assert 'wikis/test-wiki' in json_resp['data'][0]['link']
assert json_resp['data'][0]['owner'] == self.user.username
def test_can_add(self):
assert len(Wiki.objects.all()) == 0