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:
@@ -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})
|
||||
|
||||
|
@@ -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'),
|
||||
|
20
seahub/wiki/migrations/0003_auto_20180428_0619.py
Normal file
20
seahub/wiki/migrations/0003_auto_20180428_0619.py
Normal 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),
|
||||
),
|
||||
]
|
@@ -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,
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user