mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-27 07:44:50 +00:00
Refactor group wiki
This commit is contained in:
@@ -3,19 +3,24 @@ import os
|
||||
import stat
|
||||
import urllib2
|
||||
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.utils.http import urlquote
|
||||
from django.utils.encoding import smart_str
|
||||
|
||||
import seaserv
|
||||
from pysearpc import SearpcError
|
||||
from group.models import GroupWiki
|
||||
from seahub.utils import EMPTY_SHA1
|
||||
from seahub.utils.repo import list_dir_by_path
|
||||
from seahub.utils.slugify import slugify
|
||||
from seahub.utils import render_error, render_permission_error, string2list, \
|
||||
gen_file_get_url, get_file_type_and_ext, \
|
||||
get_file_contributors
|
||||
|
||||
from seahub.utils.file_types import IMAGE
|
||||
from models import WikiPageMissing, WikiDoesNotExist, \
|
||||
PersonalWiki
|
||||
|
||||
__all__ = ["get_wiki_dirent"]
|
||||
__all__ = ["get_wiki_dirent", "clean_page_name"]
|
||||
|
||||
|
||||
|
||||
@@ -37,9 +42,7 @@ def get_wiki_dirent(repo_id, page_name):
|
||||
if cmmt is None:
|
||||
raise WikiPageMissing
|
||||
dirs = list_dir_by_path(cmmt, "/")
|
||||
if not dirs:
|
||||
raise WikiPageMissing
|
||||
else:
|
||||
if dirs:
|
||||
for e in dirs:
|
||||
if stat.S_ISDIR(e.mode):
|
||||
continue # skip directories
|
||||
@@ -54,16 +57,6 @@ def get_file_url(repo, obj_id, file_name):
|
||||
url = gen_file_get_url(access_token, file_name)
|
||||
return url
|
||||
|
||||
def get_wiki_page(request, page_name):
|
||||
repo = find_wiki_repo(request, group)
|
||||
dirent = get_wiki_dirent(repo.id, page_name)
|
||||
if not dirent:
|
||||
raise WikiPageMissing
|
||||
url = get_file_url(repo, dirent.obj_id, dirent.obj_name)
|
||||
file_response = urllib2.urlopen(url)
|
||||
content = file_response.read()
|
||||
return content, repo.id, dirent
|
||||
|
||||
def get_personal_wiki_repo(username):
|
||||
try:
|
||||
wiki = PersonalWiki.objects.get(username=username)
|
||||
@@ -74,6 +67,18 @@ def get_personal_wiki_repo(username):
|
||||
raise WikiDoesNotExist
|
||||
return repo
|
||||
|
||||
def get_group_wiki_repo(group, username):
|
||||
try:
|
||||
groupwiki = GroupWiki.objects.get(group_id=group.id)
|
||||
except GroupWiki.DoesNotExist:
|
||||
raise WikiDoesNotExist
|
||||
|
||||
repos = seaserv.get_group_repos(group.id, username)
|
||||
for repo in repos:
|
||||
if repo.id == groupwiki.repo_id:
|
||||
return repo
|
||||
raise WikiDoesNotExist
|
||||
|
||||
def get_personal_wiki_page(username, page_name):
|
||||
repo = get_personal_wiki_repo(username)
|
||||
dirent = get_wiki_dirent(repo.id, page_name)
|
||||
@@ -82,6 +87,14 @@ def get_personal_wiki_page(username, page_name):
|
||||
content = file_response.read()
|
||||
return content, repo, dirent
|
||||
|
||||
def get_group_wiki_page(username, group, page_name):
|
||||
repo = get_group_wiki_repo(group, username)
|
||||
dirent = get_wiki_dirent(repo.id, page_name)
|
||||
url = get_file_url(repo, dirent.obj_id, dirent.obj_name)
|
||||
file_response = urllib2.urlopen(url)
|
||||
content = file_response.read()
|
||||
return content, repo, dirent
|
||||
|
||||
def get_wiki_pages(repo):
|
||||
"""
|
||||
return pages in hashtable {normalized_name: page_name}
|
||||
@@ -97,7 +110,6 @@ def get_wiki_pages(repo):
|
||||
key = normalize_page_name(name)
|
||||
pages[key] = name
|
||||
return pages
|
||||
|
||||
|
||||
def convert_wiki_link(content, url_prefix, repo_id, username):
|
||||
import re
|
||||
@@ -110,18 +122,23 @@ def convert_wiki_link(content, url_prefix, repo_id, username):
|
||||
filetype, fileext = get_file_type_and_ext(page_name)
|
||||
if fileext == '':
|
||||
# convert page_name that extension is missing to a markdown page
|
||||
dirent = get_wiki_dirent(repo_id, page_name)
|
||||
if dirent is not None:
|
||||
page_alias = page_name
|
||||
if len(page_name.split('|')) > 1:
|
||||
page_alias = page_name.split('|')[0]
|
||||
page_name = page_name.split('|')[1]
|
||||
|
||||
try:
|
||||
dirent = get_wiki_dirent(repo_id, page_name)
|
||||
a_tag = "<a href='%s'>%s</a>"
|
||||
return a_tag % (url_prefix + '/' + normalize_page_name(page_name), page_name)
|
||||
else:
|
||||
return a_tag % (smart_str(url_prefix + normalize_page_name(page_name) + '/'), page_alias)
|
||||
except (WikiDoesNotExist, WikiPageMissing):
|
||||
a_tag = '''<a class="wiki-page-missing" href='%s'>%s</a>'''
|
||||
return a_tag % (url_prefix + '/' + page_name.replace('/', '-'), page_name)
|
||||
return a_tag % (smart_str(url_prefix + page_name.replace('/', '-') + '/'), page_alias)
|
||||
elif filetype == IMAGE:
|
||||
# load image to wiki page
|
||||
path = "/" + page_name
|
||||
filename = os.path.basename(path)
|
||||
obj_id = get_file_id_by_path(repo_id, path)
|
||||
obj_id = seaserv.get_file_id_by_path(repo_id, path)
|
||||
if not obj_id:
|
||||
# Replace '/' in page_name to '-', since wiki name can not
|
||||
# contain '/'.
|
||||
@@ -129,17 +146,20 @@ def convert_wiki_link(content, url_prefix, repo_id, username):
|
||||
(url_prefix + '/' + page_name.replace('/', '-'), page_name)
|
||||
|
||||
token = seaserv.web_get_access_token(repo_id, obj_id, 'view', username)
|
||||
return '<img src="%s" alt="%s" />' % (gen_file_get_url(token, filename), filename)
|
||||
ret = '<img src="%s" alt="%s" />' % (gen_file_get_url(token, filename), filename)
|
||||
return smart_str(ret)
|
||||
else:
|
||||
from base.templatetags.seahub_tags import file_icon_filter
|
||||
from django.conf import settings
|
||||
|
||||
# convert other types of filelinks to clickable links
|
||||
path = "/" + page_name
|
||||
icon = file_icon_filter(page_name)
|
||||
s = reverse('repo_view_file', args=[repo_id]) + \
|
||||
'?p=' + urllib2.quote(smart_str(path))
|
||||
'?p=' + urlquote(path)
|
||||
a_tag = '''<img src="%simg/file/%s" alt="%s" class="vam" /> <a href='%s' target='_blank' class="vam">%s</a>'''
|
||||
return a_tag % (MEDIA_URL, icon, icon, s, page_name)
|
||||
ret = a_tag % (settings.MEDIA_URL, icon, icon, smart_str(s), page_name)
|
||||
return smart_str(ret)
|
||||
|
||||
return re.sub(r'\[\[(.+)\]\]|(`.+`)', repl, content)
|
||||
|
||||
|
Reference in New Issue
Block a user