mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-19 10:26:17 +00:00
Update group wiki
This commit is contained in:
@@ -12,7 +12,7 @@
|
|||||||
<ul class="tabnav-tabs">
|
<ul class="tabnav-tabs">
|
||||||
<li class="tabnav-tab"><a href="{% url 'group_info' group.id %}">{% trans "Libraries" %}</a></li>
|
<li class="tabnav-tab"><a href="{% url 'group_info' group.id %}">{% trans "Libraries" %}</a></li>
|
||||||
<li class="tabnav-tab"><a href="{% url 'group_discus' group.id %}">{% trans "Discussions" %}</a></li>
|
<li class="tabnav-tab"><a href="{% url 'group_discus' group.id %}">{% trans "Discussions" %}</a></li>
|
||||||
<li class="tabnav-tab tabnav-tab-cur">{% trans "Wiki" %}</li>
|
<li class="tabnav-tab tabnav-tab-cur"><a href="{% url 'group_wiki' group.id %}">{% trans "Wiki" %}</a></li>
|
||||||
{% if is_staff %}
|
{% if is_staff %}
|
||||||
<li class="tabnav-tab"><a href="{% url 'pubuser' %}">{% trans "Admin" %}</a></li>
|
<li class="tabnav-tab"><a href="{% url 'pubuser' %}">{% trans "Admin" %}</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -23,16 +23,21 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button id="page-create" class="fright">{% trans "New Page" %}</button>
|
{% if not wiki_exists %}
|
||||||
<button id="page-edit" class="fright">{% trans "Edit Page" %}</button>
|
|
||||||
|
|
||||||
<a href="{% url 'group_wiki_create' group.id %}">{% trans "Create Wiki" %}</a>
|
<a href="{% url 'group_wiki_create' group.id %}">{% trans "Create Wiki" %}</a>
|
||||||
|
{% else %}
|
||||||
|
<button id="page-create" class="fright">{% trans "New Page" %}</button>
|
||||||
|
|
||||||
|
{% if wiki_page_missing %}
|
||||||
|
<p>Seems this page is deleted by others, you can create a new page by clicking "New Page" button. </p>
|
||||||
|
{% else %}
|
||||||
|
<button id="page-edit" class="fright">{% trans "Edit Page" %}</button>
|
||||||
|
|
||||||
<div id="wiki-area" class="article">
|
<div id="wiki-area" class="article">
|
||||||
<h1>{{ page }}</h1>
|
<h1>{{ page }}</h1>
|
||||||
<div id="wiki-content"></div>
|
<div id="wiki-content"></div>
|
||||||
</div>
|
</div>
|
||||||
|
{% endif%}
|
||||||
|
|
||||||
<form id="page-create-form" action="{% url 'group_wiki_page_new' group.id %}" method="post" class="hide">
|
<form id="page-create-form" action="{% url 'group_wiki_page_new' group.id %}" method="post" class="hide">
|
||||||
<h3>{% trans "New Page"%}</h3>
|
<h3>{% trans "New Page"%}</h3>
|
||||||
@@ -42,6 +47,8 @@
|
|||||||
<input type="submit" id="page-create-submit" value="{% trans "Submit"%}" class="submit"/>
|
<input type="submit" id="page-create-submit" value="{% trans "Submit"%}" class="submit"/>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
@@ -59,10 +66,10 @@
|
|||||||
{% block extra_script %}
|
{% block extra_script %}
|
||||||
<script type="text/javascript" src="{{MEDIA_URL}}js/showdown.js"></script>
|
<script type="text/javascript" src="{{MEDIA_URL}}js/showdown.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
{% if wiki_exists %}
|
||||||
var converter = new Showdown.converter();
|
var converter = new Showdown.converter();
|
||||||
$('#wiki-content').html(converter.makeHtml('{{ content|escapejs }}')).children(':first').css('margin-top', '0');
|
$('#wiki-content').html(converter.makeHtml('{{ content|escapejs }}')).children(':first').css('margin-top', '0');
|
||||||
|
|
||||||
<!-- wiki page operation -->
|
|
||||||
$('#page-create').click(function() {
|
$('#page-create').click(function() {
|
||||||
$('#page-create-form').modal({appendTo: '#main', autoResize: true});
|
$('#page-create-form').modal({appendTo: '#main', autoResize: true});
|
||||||
})
|
})
|
||||||
@@ -70,7 +77,7 @@ $('#page-create').click(function() {
|
|||||||
$('#page-edit').click(function() {
|
$('#page-edit').click(function() {
|
||||||
window.open("{% url 'group_wiki_page_edit' group.id page %}")
|
window.open("{% url 'group_wiki_page_edit' group.id page %}")
|
||||||
})
|
})
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@@ -10,7 +10,7 @@ urlpatterns = patterns('',
|
|||||||
url(r'^(?P<group_id>\d+)/$', group_info, name='group_info'),
|
url(r'^(?P<group_id>\d+)/$', group_info, name='group_info'),
|
||||||
url(r'^(?P<group_id>\d+)/discus/$', group_discus, name='group_discus'),
|
url(r'^(?P<group_id>\d+)/discus/$', group_discus, name='group_discus'),
|
||||||
url(r'^(?P<group_id>\d+)/wiki/$', group_wiki, name='group_wiki'),
|
url(r'^(?P<group_id>\d+)/wiki/$', group_wiki, name='group_wiki'),
|
||||||
url(r'^(?P<group_id>\d+)/wiki/(?P<page_name>[^/]+)$', group_wiki, name='group_wiki'),
|
url(r'^(?P<group_id>\d+)/wiki/(?P<page_name>[^/]+)/$', group_wiki, name='group_wiki'),
|
||||||
url(r'^(?P<group_id>\d+)/wiki_create/$', group_wiki_create, name='group_wiki_create'),
|
url(r'^(?P<group_id>\d+)/wiki_create/$', group_wiki_create, name='group_wiki_create'),
|
||||||
url(r'^(?P<group_id>\d+)/wiki_page_new/$', group_wiki_page_new, name='group_wiki_page_new'),
|
url(r'^(?P<group_id>\d+)/wiki_page_new/$', group_wiki_page_new, name='group_wiki_page_new'),
|
||||||
url(r'^(?P<group_id>\d+)/wiki_page_edit/(?P<page_name>[^/]+)$', group_wiki_page_edit, name='group_wiki_page_edit'),
|
url(r'^(?P<group_id>\d+)/wiki_page_edit/(?P<page_name>[^/]+)$', group_wiki_page_edit, name='group_wiki_page_edit'),
|
||||||
|
@@ -23,7 +23,8 @@ 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, check_permission, is_passwd_set, unshare_group_repo
|
get_org_groups_by_user, check_permission, is_passwd_set, \
|
||||||
|
unshare_group_repo, get_file_id_by_path
|
||||||
from pysearpc import SearpcError
|
from pysearpc import SearpcError
|
||||||
|
|
||||||
from decorators import group_staff_required
|
from decorators import group_staff_required
|
||||||
@@ -1088,6 +1089,11 @@ def group_discus(request, group_id):
|
|||||||
}, context_instance=RequestContext(request));
|
}, context_instance=RequestContext(request));
|
||||||
|
|
||||||
|
|
||||||
|
class WikiDoesNotExist(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class WikiPageMissing(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
def find_wiki_repo(request, group_id):
|
def find_wiki_repo(request, group_id):
|
||||||
repos = get_group_repos(group_id, request.user.username)
|
repos = get_group_repos(group_id, request.user.username)
|
||||||
@@ -1096,9 +1102,10 @@ def find_wiki_repo(request, group_id):
|
|||||||
return repo
|
return repo
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_file_url(repo_id, path, filename):
|
def get_file_url(repo_id, path, filename):
|
||||||
obj_id = seafserv_threaded_rpc.get_file_id_by_path(repo_id, path)
|
obj_id = get_file_id_by_path(repo_id, path)
|
||||||
|
if not obj_id:
|
||||||
|
raise WikiPageMissing
|
||||||
access_token = seafserv_rpc.web_get_access_token(repo_id, obj_id,
|
access_token = seafserv_rpc.web_get_access_token(repo_id, obj_id,
|
||||||
'view', '')
|
'view', '')
|
||||||
url = gen_file_get_url(access_token, filename)
|
url = gen_file_get_url(access_token, filename)
|
||||||
@@ -1107,31 +1114,34 @@ def get_file_url(repo_id, path, filename):
|
|||||||
def get_wiki_page(request, group_id, page_name):
|
def get_wiki_page(request, group_id, page_name):
|
||||||
import urllib2
|
import urllib2
|
||||||
repo = find_wiki_repo(request, group_id)
|
repo = find_wiki_repo(request, group_id)
|
||||||
|
if not repo:
|
||||||
|
raise WikiDoesNotExist
|
||||||
path = "/" + page_name + ".md"
|
path = "/" + page_name + ".md"
|
||||||
filename = page_name + ".md"
|
filename = page_name + ".md"
|
||||||
url = get_file_url(repo.id, path, filename)
|
url = get_file_url(repo.id, path, filename)
|
||||||
file_response = urllib2.urlopen(url)
|
file_response = urllib2.urlopen(url)
|
||||||
content = file_response.read()
|
content = file_response.read()
|
||||||
return content
|
return content, repo.id
|
||||||
|
|
||||||
def convert_wiki_link(content, group):
|
def convert_wiki_link(content, group, repo_id):
|
||||||
import re
|
import re
|
||||||
|
|
||||||
def repl(matchobj):
|
def repl(matchobj):
|
||||||
print matchobj.group(1)
|
|
||||||
linkname = matchobj.group(1)
|
linkname = matchobj.group(1)
|
||||||
filename = linkname + ".md"
|
filename = linkname + ".md"
|
||||||
path = "/" + filename
|
path = "/" + filename
|
||||||
return "<a href='%sgroup/%d/wiki/%s'>%s</a>" % (SITE_ROOT,
|
if get_file_id_by_path(repo_id, path):
|
||||||
group.id, linkname, linkname)
|
a_tag = "<a href='%sgroup/%d/wiki/%s/'>%s</a>"
|
||||||
|
return a_tag % (SITE_ROOT, group.id, linkname, linkname)
|
||||||
|
else:
|
||||||
|
a_tag = '''<a class="wiki-page-missing" href='%sgroup/%d/wiki/%s/'>%s</a>'''
|
||||||
|
return a_tag % (SITE_ROOT, group.id, linkname, linkname)
|
||||||
|
|
||||||
return re.sub(r'\[\[(.+)\]\]', repl, content)
|
return re.sub(r'\[\[(.+)\]\]', repl, content)
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def group_wiki(request, group_id, page_name="home"):
|
def group_wiki(request, group_id, page_name="home"):
|
||||||
|
group_id_int = int(group_id) # Checked by URL Conf
|
||||||
group_id_int = int(group_id) # Checkeb by URL Conf
|
|
||||||
|
|
||||||
group = get_group(group_id_int)
|
group = get_group(group_id_int)
|
||||||
if not group:
|
if not group:
|
||||||
@@ -1148,8 +1158,16 @@ def group_wiki(request, group_id, page_name="home"):
|
|||||||
|
|
||||||
is_staff = True if check_group_staff(group.id, request.user) else False
|
is_staff = True if check_group_staff(group.id, request.user) else False
|
||||||
|
|
||||||
content = get_wiki_page(request, group_id_int, page_name)
|
content = ''
|
||||||
content = convert_wiki_link(content, group)
|
wiki_exists, wiki_page_missing = True, False
|
||||||
|
try:
|
||||||
|
content, repo_id = get_wiki_page(request, group_id_int, page_name)
|
||||||
|
except WikiDoesNotExist:
|
||||||
|
wiki_exists = False
|
||||||
|
except WikiPageMissing:
|
||||||
|
wiki_page_missing = True
|
||||||
|
else:
|
||||||
|
content = convert_wiki_link(content, group, repo_id)
|
||||||
|
|
||||||
return render_to_response("group/group_wiki.html", {
|
return render_to_response("group/group_wiki.html", {
|
||||||
"group_id": group_id,
|
"group_id": group_id,
|
||||||
@@ -1157,9 +1175,9 @@ def group_wiki(request, group_id, page_name="home"):
|
|||||||
"is_staff": is_staff,
|
"is_staff": is_staff,
|
||||||
"content": content,
|
"content": content,
|
||||||
"page": page_name,
|
"page": page_name,
|
||||||
}, context_instance=RequestContext(request));
|
"wiki_exists": wiki_exists,
|
||||||
|
"wiki_page_missing": wiki_page_missing,
|
||||||
|
}, context_instance=RequestContext(request))
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def group_wiki_create(request, group_id):
|
def group_wiki_create(request, group_id):
|
||||||
@@ -1213,8 +1231,11 @@ def group_wiki_create(request, group_id):
|
|||||||
print e
|
print e
|
||||||
return json_error(_(u'Failed to create: internal error.'))
|
return json_error(_(u'Failed to create: internal error.'))
|
||||||
|
|
||||||
return HttpResponseRedirect(reverse('group_info', args=[group_id]))
|
# create home page
|
||||||
|
page_name = "home.md"
|
||||||
|
seafserv_threaded_rpc.post_empty_file(repo_id, "/", page_name, user)
|
||||||
|
|
||||||
|
return HttpResponseRedirect(reverse('group_info', args=[group_id]))
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def group_wiki_page_new(request, group_id, page_name="home"):
|
def group_wiki_page_new(request, group_id, page_name="home"):
|
||||||
|
@@ -1855,3 +1855,6 @@ textarea:-moz-placeholder {/* for FF */
|
|||||||
#page-edit {
|
#page-edit {
|
||||||
margin-right:6px;
|
margin-right:6px;
|
||||||
}
|
}
|
||||||
|
.wiki-page-missing {
|
||||||
|
color:red;
|
||||||
|
}
|
@@ -316,6 +316,9 @@ def gen_file_get_url(token, filename):
|
|||||||
Generate httpserver file url.
|
Generate httpserver file url.
|
||||||
Format: http://<domain:port>/files/<token>/<filename>
|
Format: http://<domain:port>/files/<token>/<filename>
|
||||||
"""
|
"""
|
||||||
|
if isinstance(filename, unicode):
|
||||||
|
filename = urllib2.quote(filename.encode('utf-8'))
|
||||||
|
|
||||||
return '%s/files/%s/%s' % (get_httpserver_root(), token, filename)
|
return '%s/files/%s/%s' % (get_httpserver_root(), token, filename)
|
||||||
|
|
||||||
def gen_file_upload_url(token, op):
|
def gen_file_upload_url(token, op):
|
||||||
|
Reference in New Issue
Block a user