mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-02 07:27:04 +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.api2.utils import api_error
|
||||||
from seahub.wiki.models import Wiki, DuplicateWikiNameError
|
from seahub.wiki.models import Wiki, DuplicateWikiNameError
|
||||||
from seahub.wiki.utils import is_valid_wiki_name
|
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__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -33,8 +33,43 @@ class WikisView(APIView):
|
|||||||
def get(self, request, format=None):
|
def get(self, request, format=None):
|
||||||
"""List all wikis.
|
"""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
|
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})
|
return Response({'data': ret})
|
||||||
|
|
||||||
|
@@ -16,9 +16,10 @@
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="30%">{% trans "Name" %}</td>
|
<td width="30%">{% trans "Name" %}</td>
|
||||||
<td width="20%">{% trans "Permission" %}</td>
|
<td width="15%">{% trans "Permission" %}</td>
|
||||||
<td width="20%">{% trans "Created At" %}</td>
|
<td width="15%">{% trans "Owner" %}</td>
|
||||||
<td width="20%">{% trans "Last Update" %}</td>
|
<td width="15%">{% trans "Created At" %}</td>
|
||||||
|
<td width="15%">{% trans "Last Update" %}</td>
|
||||||
<td width="10%"><!-- operation --></td>
|
<td width="10%"><!-- operation --></td>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@@ -56,6 +57,7 @@
|
|||||||
<option value="public" <% if (permission == 'public') { %>selected="selected"<% } %>>{% trans "public" %}</option>
|
<option value="public" <% if (permission == 'public') { %>selected="selected"<% } %>>{% trans "public" %}</option>
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
|
<td><a href="<%= owner_profile_url %>"><%- owner_nickname %></a></td>
|
||||||
<td title="<%= create_time %>"><%= create_time_from_now %></td>
|
<td title="<%= create_time %>"><%= create_time_from_now %></td>
|
||||||
<td title="<%= update_time %>"><%= update_time_from_now %></td>
|
<td title="<%= update_time %>"><%= update_time_from_now %></td>
|
||||||
<td>
|
<td>
|
||||||
@@ -231,6 +233,7 @@ var wiki = {
|
|||||||
var update_at_m = moment(obj.updated_at);
|
var update_at_m = moment(obj.updated_at);
|
||||||
var data = $.extend({}, obj, {
|
var data = $.extend({}, obj, {
|
||||||
'permission_text': getPermText(obj.permission),
|
'permission_text': getPermText(obj.permission),
|
||||||
|
'owner_profile_url': '{{SITE_ROOT}}profile/' + encodeURIComponent(obj.owner) + '/',
|
||||||
'create_time': create_at_m.format('LLLL'),
|
'create_time': create_at_m.format('LLLL'),
|
||||||
'create_time_from_now': this.util_getRelativeTimeStr(create_at_m),
|
'create_time_from_now': this.util_getRelativeTimeStr(create_at_m),
|
||||||
'update_time': update_at_m.format('LLLL'),
|
'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 seaserv import seafile_api
|
||||||
|
|
||||||
from seahub.base.fields import LowerCaseCharField
|
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 import get_site_scheme_and_netloc
|
||||||
from seahub.utils.timeutils import (timestamp_to_isoformat_timestr,
|
from seahub.utils.timeutils import (timestamp_to_isoformat_timestr,
|
||||||
datetime_to_isoformat_timestr)
|
datetime_to_isoformat_timestr)
|
||||||
@@ -101,7 +102,7 @@ class Wiki(models.Model):
|
|||||||
username = LowerCaseCharField(max_length=255)
|
username = LowerCaseCharField(max_length=255)
|
||||||
name = models.CharField(max_length=255)
|
name = models.CharField(max_length=255)
|
||||||
slug = models.CharField(max_length=255, unique=True)
|
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
|
permission = models.CharField(max_length=50) # private, public, login
|
||||||
created_at = models.DateTimeField(default=timezone.now, db_index=True)
|
created_at = models.DateTimeField(default=timezone.now, db_index=True)
|
||||||
objects = WikiManager()
|
objects = WikiManager()
|
||||||
@@ -136,6 +137,8 @@ class Wiki(models.Model):
|
|||||||
def to_dict(self):
|
def to_dict(self):
|
||||||
return {
|
return {
|
||||||
'id': self.pk,
|
'id': self.pk,
|
||||||
|
'owner': self.username,
|
||||||
|
'owner_nickname': email2nickname(self.username),
|
||||||
'name': self.name,
|
'name': self.name,
|
||||||
'slug': self.slug,
|
'slug': self.slug,
|
||||||
'link': self.link,
|
'link': self.link,
|
||||||
|
@@ -4,6 +4,7 @@ from django.core.urlresolvers import reverse
|
|||||||
import seaserv
|
import seaserv
|
||||||
from seaserv import seafile_api, ccnet_api
|
from seaserv import seafile_api, ccnet_api
|
||||||
|
|
||||||
|
from seahub.share.utils import share_dir_to_user
|
||||||
from seahub.wiki.models import Wiki
|
from seahub.wiki.models import Wiki
|
||||||
from seahub.test_utils import BaseTestCase
|
from seahub.test_utils import BaseTestCase
|
||||||
|
|
||||||
@@ -29,6 +30,29 @@ class WikisViewTest(BaseTestCase):
|
|||||||
assert len(json_resp['data']) == 1
|
assert len(json_resp['data']) == 1
|
||||||
assert json_resp['data'][0]['name'] == wiki.name
|
assert json_resp['data'][0]['name'] == wiki.name
|
||||||
assert 'wikis/test-wiki' in json_resp['data'][0]['link']
|
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):
|
def test_can_add(self):
|
||||||
assert len(Wiki.objects.all()) == 0
|
assert len(Wiki.objects.all()) == 0
|
||||||
|
Reference in New Issue
Block a user